From a85a862c18e2f026a4de62d8d76ecf5247f8a279 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 9 Jul 2014 12:59:39 +0800 Subject: [PATCH 01/66] =?UTF-8?q?registerHandler=20v.1=20&=20updatedatabas?= =?UTF-8?q?es=20by=E6=B1=9F=E5=98=89=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/dbapi.py | 35 +++++++++++++++++++++++++++++++++ code/handler/RegisterHandler.py | 21 ++++++++++++++++++-- code/index.html | 2 +- db.sql | 3 +-- 4 files changed, 56 insertions(+), 5 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 2ecf9ec..ec09359 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -56,5 +56,40 @@ def getEventsByUserName(self,username): return [] return self.getEventsByUserId(user["userid"]) + #check if cardid exist + #exist return dict + #not exist return none + def getInfoBycardid(self,cardid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select * from info where cardid=%s" + param=(cardid,) + cursor.execute(sql,param) + result=cursor.fetchone() + cursor.close() + return result + + #register a new user + #pre condiction:no user.name,info.cardid duplicate + #after : insert new user,new info + def register(self,content): + cursor = self.db.cursor() + + sql = "insert into user(name,kind,password) values(%s,%s,%s)" + param = (content["username"],content["kind"],content["password"]) + cursor.execute(sql,param) + self.db.commit() + + cursor.execute('SELECT LAST_INSERT_ID()') + result=cursor.fetchone() + print result[0] + + sql = "insert into info(id,cardid,name,sex,age,address,illness,credit,score) values(%s,%s,%s,%s,%s,%s,%s,%s,%s)" + param = (result[0],content["cardid"],content["realname"],content["sex"],content["age"],content["address"],content["illness"],0,0) + cursor.execute(sql,param) + self.db.commit() + + cursor.close() + return + def __del__(self): self.db.close() diff --git a/code/handler/RegisterHandler.py b/code/handler/RegisterHandler.py index ca1f57f..c139935 100644 --- a/code/handler/RegisterHandler.py +++ b/code/handler/RegisterHandler.py @@ -1,7 +1,24 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,dbapi +import os,sys,json +sys.path.append("..") +import dbapi class RegisterHandler(tornado.web.RequestHandler): def post(self): - self.write("RegisterHandler") + #content = self.get_argument("content") + content = '{"username": "ooo","password": 111111,"kind": 1, "cardid":"42434q" ,"realname":"hiii","sex":1,"age":41, "address":"iii","illness":"hijiiii"}' + j = json.loads(content) + if(self.application.dbapi.getUserByUserName(j['username']) is not None): + self.write("{'state':1}") + print "username exist" + return + if(self.application.dbapi.getInfoBycardid(j['cardid']) is not None): + self.write("{'state':2}") + print "cardid exist" + return + + self.application.dbapi.register(j) + self.write("{'state':3}") + print("Register") + return diff --git a/code/index.html b/code/index.html index daae199..d10ae67 100644 --- a/code/index.html +++ b/code/index.html @@ -4,7 +4,7 @@ Test -
+ diff --git a/db.sql b/db.sql index 69c8176..06b4307 100644 --- a/db.sql +++ b/db.sql @@ -19,12 +19,11 @@ CREATE TABLE user id int NOT NULL AUTO_INCREMENT, name varchar(50) NOT NULL, kind int NOT NULL, - info int, password varchar(30), primary key(id), unique(name) ); -. + /* 用户信息表(用户头像放在统一文件夹下,以id为标识符) id:对应用户id From 7f12abc7864a9009b2ed273a85b72d8d09a841e7 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 9 Jul 2014 15:01:05 +0800 Subject: [PATCH 02/66] =?UTF-8?q?supportmessageHandler=20v1,update=20dbapi?= =?UTF-8?q?=20by=E6=B1=9F=E5=98=89=E6=88=90=2007.09?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/dbapi.py | 13 ++++++++++++ code/handler/SupportmessageHandler.py | 30 +++++++++++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index ec09359..de54d0e 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import MySQLdb,json #in init function please change the config to fit your own requirement @@ -91,5 +92,17 @@ def register(self,content): cursor.close() return + #insert support mseeage in event + #pre condiction:user.id,event.id exist;event.state = 0 + #after: uptate assist in event + def supportmessageinsert(self,content): + cursor = self.db.cursor() + sql ="update event set assist= %s where id = %s" + param = (content["assist"],content["eventid"]) + cursor.execute(sql,param) + self.db.commit() + cursor.close() + return + def __del__(self): self.db.close() diff --git a/code/handler/SupportmessageHandler.py b/code/handler/SupportmessageHandler.py index 9fd7c28..1a63a01 100644 --- a/code/handler/SupportmessageHandler.py +++ b/code/handler/SupportmessageHandler.py @@ -1,7 +1,33 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,dbapi +import os,sys,json +sys.path.append("..") +import dbapi class SupportmessageHandler(tornado.web.RequestHandler): def post(self): - self.write("SupportmessageHandler") + #content = self.get_argument("content") + content = '{"username": "ooo","eventid": 1,"assist": "ssssssssssssssss"}' + j = json.loads(content) + us = self.application.dbapi.getUserByUserName(j['username']) + if(us is None): + self.write("{'state':1}") + print "username not exist" + return + print us["id"] + + event = self.application.dbapi.getEventByEventId(j['eventid']) + if(event is None): + self.write("{'state':2}") + print "event not exist" + return + if (event['state']==1): + self.write("{'state':3}") + print "event is end" + return + if(us["id"]==event["usrid"]): + self.application.dbapi.supportmessageinsert(j) + self.write("{'state':4}") + print "insert success" + return + return From ec864af6a9c57619831b2fb5a9fd01d34b0792fc Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 9 Jul 2014 16:33:45 +0800 Subject: [PATCH 03/66] merge --- code/dbapi.py | 80 ++++++++++++++++---------- code/handler/AddrelativesHandler.py | 22 ++----- code/handler/DeleterelativesHandler.py | 12 ++-- code/handler/__init__.py | 1 + code/index.html | 18 ++++++ 5 files changed, 79 insertions(+), 54 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index de54d0e..185336d 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -9,8 +9,8 @@ class dbapi: def __init__(self): self.host="localhost" - self.user="root" - self.passwd="root" + self.user="comhelp" + self.passwd="20140629" self.dbname="community" self.charset="utf8" self.db=MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.dbname,charset=self.charset) @@ -56,12 +56,12 @@ def getEventsByUserName(self,username): if(not user): return [] return self.getEventsByUserId(user["userid"]) - - #check if cardid exist + + #check if cardid exist #exist return dict #not exist return none def getInfoBycardid(self,cardid): - cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="select * from info where cardid=%s" param=(cardid,) cursor.execute(sql,param) @@ -73,36 +73,56 @@ def getInfoBycardid(self,cardid): #pre condiction:no user.name,info.cardid duplicate #after : insert new user,new info def register(self,content): - cursor = self.db.cursor() + cursor = self.db.cursor() - sql = "insert into user(name,kind,password) values(%s,%s,%s)" - param = (content["username"],content["kind"],content["password"]) - cursor.execute(sql,param) - self.db.commit() + sql = "insert into user(name,kind,password) values(%s,%s,%s)" + param = (content["username"],content["kind"],content["password"]) + cursor.execute(sql,param) + self.db.commit() - cursor.execute('SELECT LAST_INSERT_ID()') - result=cursor.fetchone() - print result[0] + cursor.execute('SELECT LAST_INSERT_ID()') + result=cursor.fetchone() + print result[0] - sql = "insert into info(id,cardid,name,sex,age,address,illness,credit,score) values(%s,%s,%s,%s,%s,%s,%s,%s,%s)" - param = (result[0],content["cardid"],content["realname"],content["sex"],content["age"],content["address"],content["illness"],0,0) - cursor.execute(sql,param) - self.db.commit() + sql = "insert into info(id,cardid,name,sex,age,address,illness,credit,score) values(%s,%s,%s,%s,%s,%s,%s,%s,%s)" + param = (result[0],content["cardid"],content["realname"],content["sex"],content["age"],content["address"],content["illness"],0,0) + cursor.execute(sql,param) + self.db.commit() - cursor.close() - return + cursor.close() + return + + #insert support mseeage in event + #pre condiction:user.id,event.id exist;event.state = 0 + #after: uptate assist in event + def supportmessageinsert(self,content): + cursor = self.db.cursor() + sql ="update event set assist= %s where id = %s" + param = (content["assist"],content["eventid"]) + cursor.execute(sql,param) + self.db.commit() + cursor.close() + return + + def getRelationByUserId(self, u_id, r_id): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="SELECT * FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'" + cursor.execute(sql) + row = int(cursor.rowcount) + cursor.close() + return row - #insert support mseeage in event - #pre condiction:user.id,event.id exist;event.state = 0 - #after: uptate assist in event - def supportmessageinsert(self,content): - cursor = self.db.cursor() - sql ="update event set assist= %s where id = %s" - param = (content["assist"],content["eventid"]) - cursor.execute(sql,param) - self.db.commit() - cursor.close() - return + def deleteRelationByUserId(self, u_id, r_id): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="DELETE FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'" + cursor.execute(sql) + cursor.close() + + def addRelationByUserId(self, u_id, r_id): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="INSERT INTO relation (usrid, cid, kind) VALUES ('" + u_id + "', '" + r_id + "', '1')" + cursor.execute(sql) + cursor.close() def __del__(self): self.db.close() diff --git a/code/handler/AddrelativesHandler.py b/code/handler/AddrelativesHandler.py index 2372f65..d857f23 100644 --- a/code/handler/AddrelativesHandler.py +++ b/code/handler/AddrelativesHandler.py @@ -1,30 +1,20 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os, dbapi, json, sys +import os, json, sys sys.path.append("..") +import dbapi -class DeleterelativesHandler(tornado.web.RequestHandler): +class AddrelativesHandler(tornado.web.RequestHandler): def post(self): - cursor = dbapi.db.cursor(MySQLdb.cursors.DictCursor) u_id = self.get_argument('u_id') r_id = self.get_argument('r_id') - cursor.execute("SELECT * FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'") - row = int(cursor.rowcount) + row = self.application.dbapi.getRelationByUserId(u_id, r_id) if row == 0: - sql = "INSERT INTO relation (usrid, cid, kind) VALUES ('" + u_id + "', '" + r_id + "', '1')" - self.write(sql) - try: - cursor.execute(sql) - self.application.db.commit() - add_message = {'state': 1} - except: - self.application.db.rollback() - add_message = {'state': 2} + self.application.dbapi.addRelationByUserId(u_id, r_id) + add_message = {'state': 1} else: add_message = {'state': 0} - self.response.headers['Content-Type'] = "application/json" - self.response.out.write(json.dumps(add_message)) self.write(add_message) diff --git a/code/handler/DeleterelativesHandler.py b/code/handler/DeleterelativesHandler.py index 428b480..6d701db 100644 --- a/code/handler/DeleterelativesHandler.py +++ b/code/handler/DeleterelativesHandler.py @@ -1,26 +1,22 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os, dbapi, json, sys +import os, json, sys sys.path.append("..") +import dbapi class DeleterelativesHandler(tornado.web.RequestHandler): def post(self): - cursor = dbapi.db.cursor(MySQLdb.cursors.DictCursor) #self.write(u_id + r_id) u_id = self.get_argument('u_id') r_id = self.get_argument('r_id') - cursor.execute("SELECT * FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'") - row = int(cursor.rowcount) + row = self.application.dbapi.getRelationByUserId(u_id, r_id) #self.write(row2) if row == 0 : delete_message = {'state': 0} else : - cursor.execute("DELETE FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'") - row = int(cursor.rowcount) + self.application.dbapi.deleteRelationByUserId(u_id, r_id) delete_message = {'state': 1} - self.response.headers['Content-Type'] = "application/json" - self.response.out.write(json.dumps(delete_message)) self.write(delete_message) diff --git a/code/handler/__init__.py b/code/handler/__init__.py index 29f4313..9540260 100644 --- a/code/handler/__init__.py +++ b/code/handler/__init__.py @@ -5,6 +5,7 @@ "CancelHandler", "CheckrelativesHandler", "DeleterelativesHandler", + "AddrelativesHandler", "HistoryHandler", "HelpmessageHandler", "SupportmessageHandler", diff --git a/code/index.html b/code/index.html index d10ae67..ecd8d83 100644 --- a/code/index.html +++ b/code/index.html @@ -13,5 +13,23 @@
+ + /api/addrelatives +
+ + + + + +
+ + /api/deleterelatives +
+ + + + + +
\ No newline at end of file From 0ade147e8df42c91bcd646701ab6a0a489edda52 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 9 Jul 2014 16:43:12 +0800 Subject: [PATCH 04/66] Fix Conflict --- code/dbapi.py | 35 ++++++++++++++++++ code/handler/AddrelativesHandler.py | 9 +++-- code/handler/DeleterelativesHandler.py | 9 +++-- code/index.html | 18 --------- ...45\217\260API\346\226\207\346\241\243.doc" | Bin 31744 -> 31744 bytes 5 files changed, 45 insertions(+), 26 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 185336d..2824f43 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -124,5 +124,40 @@ def addRelationByUserId(self, u_id, r_id): cursor.execute(sql) cursor.close() + '''Yeqin Zheng, 09/07/2014''' + def getRelationByUserId(self, u_name, r_name): + result = self.getUserByUserName(u_name) + u_id = str(result["id"]) + result = self.getUserByUserName(r_name) + r_id = str(result["id"]) + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="SELECT * FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'" + cursor.execute(sql) + row = int(cursor.rowcount) + cursor.close() + return row + + def deleteRelationByUserId(self, u_name, r_name): + result = self.getUserByUserName(u_name) + u_id = str(result["id"]) + result = self.getUserByUserName(r_name) + r_id = str(result["id"]) + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="DELETE FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'" + cursor.execute(sql) + cursor.close() + + def addRelationByUserId(self, u_name, r_name): + result = self.getUserByUserName(u_name) + u_id = str(result["id"]) + result = self.getUserByUserName(r_name) + r_id = str(result["id"]) + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="INSERT INTO relation (usrid, cid, kind) VALUES ('" + u_id + "', '" + r_id + "', '1')" + cursor.execute(sql) + cursor.close() + + '''.''' + def __del__(self): self.db.close() diff --git a/code/handler/AddrelativesHandler.py b/code/handler/AddrelativesHandler.py index d857f23..56df501 100644 --- a/code/handler/AddrelativesHandler.py +++ b/code/handler/AddrelativesHandler.py @@ -5,14 +5,15 @@ sys.path.append("..") import dbapi + class AddrelativesHandler(tornado.web.RequestHandler): def post(self): - u_id = self.get_argument('u_id') - r_id = self.get_argument('r_id') + u_name = self.get_argument('u_name') + r_name = self.get_argument('r_name') - row = self.application.dbapi.getRelationByUserId(u_id, r_id) + row = self.application.dbapi.getRelationByUserId(u_name, r_name) if row == 0: - self.application.dbapi.addRelationByUserId(u_id, r_id) + self.application.dbapi.addRelationByUserId(u_name, r_name) add_message = {'state': 1} else: add_message = {'state': 0} diff --git a/code/handler/DeleterelativesHandler.py b/code/handler/DeleterelativesHandler.py index 6d701db..5186b45 100644 --- a/code/handler/DeleterelativesHandler.py +++ b/code/handler/DeleterelativesHandler.py @@ -8,15 +8,16 @@ class DeleterelativesHandler(tornado.web.RequestHandler): def post(self): #self.write(u_id + r_id) - u_id = self.get_argument('u_id') - r_id = self.get_argument('r_id') + u_name = self.get_argument('u_name') + r_name = self.get_argument('r_name') + + row = self.application.dbapi.getRelationByUserId(u_name, r_name) - row = self.application.dbapi.getRelationByUserId(u_id, r_id) #self.write(row2) if row == 0 : delete_message = {'state': 0} else : - self.application.dbapi.deleteRelationByUserId(u_id, r_id) + self.application.dbapi.deleteRelationByUserId(u_name, r_name) delete_message = {'state': 1} self.write(delete_message) diff --git a/code/index.html b/code/index.html index ecd8d83..d10ae67 100644 --- a/code/index.html +++ b/code/index.html @@ -13,23 +13,5 @@ - - /api/addrelatives -
- - - - - -
- - /api/deleterelatives -
- - - - - -
\ No newline at end of file diff --git "a/\346\226\207\346\241\243/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" "b/\346\226\207\346\241\243/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" index 09ebcecce0097d09662ffe9a861401b29763ab45..b38ebd901f81a2cc989803a7698e608af52849ea 100644 GIT binary patch delta 2518 zcmb8x3s6*57{KxG?pu^Vd5q!%P((CLBS5qiNM%z5O|%dv(^5lH6Vq`@ZFRKl;W*fF znzVf6YiKH^T`?b%SdE66ild{9h8CguO!Gms8umZSZaLOWb#{LDJLlZjch9}&-ksNA z%xf^phM0^-m1EjtD~J(EHdKtcqv~Uh$tjN(F^R}$L|y(%jAOecu_9~Pu_uiYv`?~s zZ?)7CrgoS!jFak?xmV}#7?DWUS^dYpH)cn$uX@tbsg=&+?qZErzgSYc>kV}I`|75C zeZUS>2NGMWagJ=)6#s$Rhc|6;hoWo4)^D7j``#g=saIq}SW|6vJCRNFKE-~Hz)Io= zwDlpn#c+v4J!-m4@Nc(Jj{zlz({Cf{cBqJ1rbLrRZc<>qZzC2<{pZv9CDRUESs-%3 zkJxg9^eF0bGMb@`H_=N_C(Nyl0(Hw)VJ!6Qv>Ogp(#p~~L1xO+GF8UO6qz7h<$iJJ z?#~Mzks#Cm>Q|>j4*##M^E~k_51Et^-qy7@SmYq8a17Nrg|j$^3%G%LG$QgoZU&N& zj8vo{3y;B#TGZiZG$1sD8;3+ZfSyRhkPwNITq?tmk3tk-G8)v%@U$M)HMKRh-fD04 zVc(Bh&9{Mu?($YwdiQ#F?P&UWxhwhMw#dS`9(5ui<{~}HzLt7BBE=lt=Y6$1BHc)H zM@reY3Cp|9d9T9Hr^3NR6iu@;pf%ILC6wP<@|U?t5HaPWYH zV*s*HfF;<33#dnOO9l>u@e0at2@Rfs?S^%-w%{3Uu2!UvHYz>!>7SZhKQRT*<03BO zI&Q*?+h{~Pvq&uB5RV>6L2vZM2#mrQjK@S2q6pJa>^Ge_3ol_d-Y|dAr)!Jf)hhA98aJS&toczEiRFnR9?m^tj7kF z;v;NA8FrxpU*j7b#1S0Fd0fI3Tthu>!C@6?gAVA3PKZZWBq9ZUT`V#%08WfVK1O2< z#$f`AFbfOtI^M(@Y=#Hr*oF#JVjuS7AP%7l$8a1cP=ix&on~BKj9y4XKV-s*;mF5$6k;-_<3-HHd?>t&)mVddHtzp=Dj%W@Zfr*tj-m#2ID>OI zk1M!_U-3J_?IegqbVm|;<6%6CQ5cI!n1*7^z)Z}xbN}a1S%BBD7$sPTQfx*UJlKNm z*o`l-58tB>mvI9((SX}%^z(fdn0AJrnP`Cx_WM{gLlA-;qDq|YRsXDWDm^PmjdUh> zMme_{t}mE_Um=qz&>wof>A7?i#}Ih*15a+?Nn66bEJ5JGh+??f<5etzL561N;fuvG zyn}l(@A%KD-<`QyGbmGiKFFbd7*se~zb1M?r>UpDp6<)B0$Wgyy}0Kz|9%$6C&L+` z_75&`k)<%ld}Dh?zltebkwnEgWNU|P;e9L2P M#xl=uGwk+109T)-1^@s6 delta 2448 zcma*p3s6*57{KxG?k>BG1F{Mdg2D>M!_Wv(i5y(aM+)MDvPK%;A)@6Yv?;YEAL%$# zX{WK&!IHAn@lo8VNo685C&GM9jhYkS;42-*e30Uj+W+jbGc`7&XXkgnbIv{Yo^Q{6 z?3T3}Wv#}Sc^0Epjj|lHyImp~hH_csRhHE?YGa&;MMTPpx;#wm$+*%UA{87MN#j}C zH5~t>T5Ahed#!GxMzvW7JnE${l6^N~+5At;?IQAwdft}MS!eO@awAqbI(lb6tFDur?6k)Iye?;FHsZToyWzf{_RZx)Dr z;eq!24tf=JsflAL6D{--)M;y!;Z|+-YNN#5=P-g3M#vCJmIX3NX3BI)k;kMm|4@Oy zcfP+@H98Aart{5*8EZB=~z^mozUqceHwoU>7cVk|@j zbnfS1CznLzV*<*s4pm{wNZO=AVp@h)(L92`5zM8}L>BU~6cuQ|Wh8eJ>4j{}$7eW$ zW^-t_F$qC-?z|ASVNjt_W!@b0mBn+O2kRm(p&3_k9k*~BZRl#{-bW84AQkE8k1UME zcobq1reGS1P=eW*i&wD#%di3!R`JN^RKCCt>_Ij5qYe$YfV;5TL>vf33|vS=5_+LG z(vS`}axemU7=x*J3B{O&IViPxL_VUj2_K^ZTd)<|@h$eC20x${hjAQdaRHamjH~zy zmLQREM4=nH!-WJS;&BW>7P38Taxfa>@El%1Atqru=3xnzVmUTo8+KwhDzOLqaR3KV zi=R-3V>pgqaT2HS8yev`!{$6LqYZZvWEbgxa73dA`rrwqBNI;{2YDEWiI|Ea%*M-j z4U6y&-p6`uKsh$yQ#;pxJCz+UQHLWqi3T*H31@K$&A5hJ=;$CpBq9l^=!aQ(}uyp7c;M+LTFJ9c6hOzcG!4&XEza1mGVC$8frTHASvT3fq2 z#JkWhe*;$7^z-Nl7BzQxca=Nr4|BlqbB0GhFY|B&#}K&119xcPj#|aFT8+RB5W%uM z0uSCo8}2|aQw-k48ayDw&i_qOXQ--1Jc;{VK?Se)I$B>c?B*1MI?X ze2)iAcmHg@^@vgRBiHE1LwKfqKbYr{0Q z1-|FDmKnYbb(XR<&Suc>tJ4fbO9l;J(Z?|GCUfXZ({-|cY9V&e1Bkq{iDqctdL!la z+@u-0Y4atO#?iH`x4&f*tNslWU$1#|)J((PLS`)v{%>TPi$^cFs84LsmE+uok)d)5 zk~5-0-_z%E>&@?r&n|oVu;Hu6j$g0;Pmq>x79I6Db*weZ3(PR1#T+{=rc= Date: Wed, 9 Jul 2014 16:46:00 +0800 Subject: [PATCH 05/66] Change Folder Name --- ...\216\345\217\260API\346\226\207\346\241\243.doc" | Bin 1 file changed, 0 insertions(+), 0 deletions(-) rename "\346\226\207\346\241\243/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" => "doc/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" (100%) diff --git "a/\346\226\207\346\241\243/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" "b/doc/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" similarity index 100% rename from "\346\226\207\346\241\243/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" rename to "doc/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" From 296612b6ab81225587197093dcb6a47c5f7f0cab Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 9 Jul 2014 16:47:04 +0800 Subject: [PATCH 06/66] Delete Extra Folder --- code/zyq/api8030.py | 65 --------------------------------------------- 1 file changed, 65 deletions(-) delete mode 100644 code/zyq/api8030.py diff --git a/code/zyq/api8030.py b/code/zyq/api8030.py deleted file mode 100644 index ceb0ae7..0000000 --- a/code/zyq/api8030.py +++ /dev/null @@ -1,65 +0,0 @@ -#encoding=utf-8 -import tornado.httpserver -import tornado.ioloop -import tornado.options -import tornado.web - -import MySQLdb -import json -import re - -from tornado.options import define, options -define("port", default=8030, help="run on the given port", type=int) - -class Application(tornado.web.Application): - def __init__(self): - handlers = [(r"/api/deleterelatives/u_id=([0-9]+)&r_id=([0-9]+)", DeleteRelatives), - (r"/api/addrelatives/u_id=([0-9]+)&r_id=([0-9]+)", AddRelatives)] - self.db = MySQLdb.connect(host='localhost',user='comhelp',passwd='20140629',db="community",charset='utf8') - tornado.web.Application.__init__(self, handlers, debug=True) - -class DeleteRelatives(tornado.web.RequestHandler): - def get(self, u_id, r_id): - cursor = self.application.db.cursor(MySQLdb.cursors.DictCursor) - #self.write(u_id + r_id) - cursor.execute("SELECT * FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'") - row = int(cursor.rowcount) - #self.write(row2) - if row == 0 : - delete_message = {'state': 0} - else : - cursor.execute("DELETE FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'") - row = int(cursor.rowcount) - delete_message = {'state': 1} - - self.response.headers['Content-Type'] = "application/json" - self.response.out.write(json.dumps(delete_message)) - self.write(delete_message) - -class AddRelatives(tornado.web.RequestHandler): - def get(self, u_id, r_id): - cursor = self.application.db.cursor(MySQLdb.cursors.DictCursor) - cursor.execute("SELECT * FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'") - row = int(cursor.rowcount) - if row == 0: - sql = "INSERT INTO relation (usrid, cid, kind) VALUES ('" + u_id + "', '" + r_id + "', '1')" - self.write(sql) - try: - cursor.execute(sql) - self.application.db.commit() - add_message = {'state': 1} - except: - self.application.db.rollback() - add_message = {'state': 2} - else: - add_message = {'state': 0} - - self.response.headers['Content-Type'] = "application/json" - self.response.out.write(json.dumps(add_message)) - self.write(add_message) - -if __name__ == "__main__": - tornado.options.parse_command_line() - http_server = tornado.httpserver.HTTPServer(Application()) - http_server.listen(options.port) - tornado.ioloop.IOLoop.instance().start() \ No newline at end of file From e620292b118c8f5971bd796185861c3fcdbee498 Mon Sep 17 00:00:00 2001 From: Anton Zhong Date: Wed, 9 Jul 2014 17:15:37 +0800 Subject: [PATCH 07/66] Add dbapi and some handlers --- code/dbapi.py | 32 ++++++++++++++++++++++++++++++ code/handler/EventHandler.py | 15 ++++++++++++++ code/handler/HelpmessageHandler.py | 12 +++++++---- code/handler/HistoryHandler.py | 13 +++++++++--- 4 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 code/handler/EventHandler.py diff --git a/code/dbapi.py b/code/dbapi.py index 2824f43..aeb5902 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -159,5 +159,37 @@ def addRelationByUserId(self, u_name, r_name): '''.''' + #Anton Zhong + def getUserIdByUserName(self,username): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select id from user where name=%s" + param=(username,) + cursor.execute(sql,param) + result=cursor.fetchone() + cursor.close() + return result + + def addEventByUserName(self,username,message): + usrid=self.getUserIdByUserName(username) + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + if(not usrid): + return {"errorCode":403,"errorDesc":"No Such User: "+username} + else: + if(not("kind" in message and "content" in message)): + return {"errorCode":403,"errorDesc":"Messge Incomplete"} + else: + sql="insert into event (usrid,kind,state,content) values (%s,%s,%s)" + param=(message["usrid"],0,message["content"]) + if("assist" in message): + sql="insert into event (usrid,kind,state,content,assist) values (%s,%s,%s,%s)" + param=(message["usrid"],0,message["content"],message["assits"]) + cursor.execute(sql,param) + + #return last insert id + cursor.execute("select last_insert_id()") + return {"errorCode":200,"errorDesc":"","eventid":cursor.fetchone()["last_insert_id()"]} + + #07/09 + def __del__(self): self.db.close() diff --git a/code/handler/EventHandler.py b/code/handler/EventHandler.py new file mode 100644 index 0000000..bfd2fbb --- /dev/null +++ b/code/handler/EventHandler.py @@ -0,0 +1,15 @@ +import tornado.ioloop +import tornado.web +import tornado.httpserver + +class EventHandler(tornado.web.RequestHandler): + def get(self): + self.write("eventHandler") + def post(self): + name=self.get_argument("name") + iden=self.get_argument("id") + event=self.application.dbapi.getEventByEventId(iden) + if(event): + self.write(str(event)) + else: + self.write("No event for id "+str(iden)) \ No newline at end of file diff --git a/code/handler/HelpmessageHandler.py b/code/handler/HelpmessageHandler.py index 7c906bb..c22b6e5 100644 --- a/code/handler/HelpmessageHandler.py +++ b/code/handler/HelpmessageHandler.py @@ -1,7 +1,11 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,dbapi -class HelpmessageHandler(tornado.web.RequestHandler): - def post(self): - self.write("HelpmessageHandler") + +class HelpMessageHandler(tornado.web.RequestHandler): + def get(self): + self.write("HelpMessageHandler") + def post(self): + name=self.get_argument("name") + msg=self.get_argument("message") + result=self.application.dbapi.addEventByUserName() \ No newline at end of file diff --git a/code/handler/HistoryHandler.py b/code/handler/HistoryHandler.py index 38cbd69..7876a3c 100644 --- a/code/handler/HistoryHandler.py +++ b/code/handler/HistoryHandler.py @@ -1,7 +1,14 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,dbapi + class HistoryHandler(tornado.web.RequestHandler): - def post(self): - self.write("HistoryHandler") + def get(self): + self.write("getHandler") + + def post(self): + name=self.get_argument("name") + iden=self.get_argument("id") + his1=self.application.dbapi.getEventsByUserId(iden) + his2=self.application.dbapi.getEventsByUserName(name) + self.write(str([his1,his2])) \ No newline at end of file From a04be134c03cd17038b92d3f7daae3e0b65d561f Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 9 Jul 2014 17:25:39 +0800 Subject: [PATCH 08/66] login v1 --- code/handler/LoginHandler.py | 21 ++++++++++++++++-- ...45\217\260API\346\226\207\346\241\243.doc" | Bin 2 files changed, 19 insertions(+), 2 deletions(-) rename "doc/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" => "\346\226\207\346\241\243/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" (100%) diff --git a/code/handler/LoginHandler.py b/code/handler/LoginHandler.py index bf9c90b..d7ea99e 100644 --- a/code/handler/LoginHandler.py +++ b/code/handler/LoginHandler.py @@ -1,7 +1,24 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,dbapi +import os,sys,json +sys.path.append("..") +import dbapi class LoginHandler(tornado.web.RequestHandler): def post(self): - self.write("login") + username = self.get_argument('username') + passwd = self.get_argument('passwd') + user = self.application.dbapi.getUserByUserName(username) + if(user is None): + self.write("{'state':1}") + print "username not exist" + return + if(user["password"]!= passwd) + self.write("{'state':2}") + print "passwd incorrect" + return + self.write("{'state':3}") + print("Login") + return + + diff --git "a/doc/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" "b/\346\226\207\346\241\243/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" similarity index 100% rename from "doc/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" rename to "\346\226\207\346\241\243/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" From 7f0df38970c46470b739f8d65796d9c9bdd116ad Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 9 Jul 2014 17:27:16 +0800 Subject: [PATCH 09/66] finishHandler v0 --- code/dbapi.py | 57 +++-------------------------------- code/handler/FinishHandler.py | 19 ++++++++++-- 2 files changed, 21 insertions(+), 55 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index aeb5902..0be8509 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -57,7 +57,7 @@ def getEventsByUserName(self,username): return [] return self.getEventsByUserId(user["userid"]) - #check if cardid exist + #check if cardid exist #exist return dict #not exist return none def getInfoBycardid(self,cardid): @@ -90,7 +90,7 @@ def register(self,content): self.db.commit() cursor.close() - return + return #insert support mseeage in event #pre condiction:user.id,event.id exist;event.state = 0 @@ -104,25 +104,10 @@ def supportmessageinsert(self,content): cursor.close() return - def getRelationByUserId(self, u_id, r_id): - cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="SELECT * FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'" - cursor.execute(sql) - row = int(cursor.rowcount) - cursor.close() - return row + #get all relativeName by user.id + def getAllRelativeNamebyUid(self,uid): + return - def deleteRelationByUserId(self, u_id, r_id): - cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="DELETE FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'" - cursor.execute(sql) - cursor.close() - - def addRelationByUserId(self, u_id, r_id): - cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="INSERT INTO relation (usrid, cid, kind) VALUES ('" + u_id + "', '" + r_id + "', '1')" - cursor.execute(sql) - cursor.close() '''Yeqin Zheng, 09/07/2014''' def getRelationByUserId(self, u_name, r_name): @@ -159,37 +144,5 @@ def addRelationByUserId(self, u_name, r_name): '''.''' - #Anton Zhong - def getUserIdByUserName(self,username): - cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="select id from user where name=%s" - param=(username,) - cursor.execute(sql,param) - result=cursor.fetchone() - cursor.close() - return result - - def addEventByUserName(self,username,message): - usrid=self.getUserIdByUserName(username) - cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - if(not usrid): - return {"errorCode":403,"errorDesc":"No Such User: "+username} - else: - if(not("kind" in message and "content" in message)): - return {"errorCode":403,"errorDesc":"Messge Incomplete"} - else: - sql="insert into event (usrid,kind,state,content) values (%s,%s,%s)" - param=(message["usrid"],0,message["content"]) - if("assist" in message): - sql="insert into event (usrid,kind,state,content,assist) values (%s,%s,%s,%s)" - param=(message["usrid"],0,message["content"],message["assits"]) - cursor.execute(sql,param) - - #return last insert id - cursor.execute("select last_insert_id()") - return {"errorCode":200,"errorDesc":"","eventid":cursor.fetchone()["last_insert_id()"]} - - #07/09 - def __del__(self): self.db.close() diff --git a/code/handler/FinishHandler.py b/code/handler/FinishHandler.py index d142506..d01b2ff 100644 --- a/code/handler/FinishHandler.py +++ b/code/handler/FinishHandler.py @@ -1,7 +1,20 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,dbapi +import os,sys,json +sys.path.append("..") +import dbapi class FinishHandler(tornado.web.RequestHandler): - def post(self): - self.write("FinishHandler") + def post(self): + #username = self.get_argument("username") + #eventid = self.get_argument("eventid") + event = self.application.dbapi.getEventByEventId(eventid) + if(event is None): + self.write("{'state':1}") + print "event not exist" + return + rNamelist = self.application.dbapi.getAllRelativeNamebyUid(event["usrid"]) + if() + self.application.dbapi.updateEstate(username,eventid) + + self.write("FinishHandler") \ No newline at end of file From ab0e8bdc36d560f6d44de2b704d896c0ea9b7f36 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Thu, 10 Jul 2014 09:27:47 +0800 Subject: [PATCH 10/66] index --- code/dbapi.py | 104 ++++++------------ code/handler/FinishHandler.py | 6 +- code/handler/LoginHandler.py | 2 +- code/index.html | 24 +--- code/main.py | 2 +- ...45\217\260API\346\226\207\346\241\243.doc" | Bin 31744 -> 19456 bytes 6 files changed, 41 insertions(+), 97 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 4cd949e..508b293 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -9,8 +9,10 @@ class dbapi: def __init__(self): self.host="localhost" - self.user="comhelp" - self.passwd="20140629" + #self.user="comhelp" + #self.passwd="20140629" + self.user="root" + self.passwd="root" self.dbname="community" self.charset="utf8" self.db=MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.dbname,charset=self.charset) @@ -56,12 +58,12 @@ def getEventsByUserName(self,username): if(not user): return [] return self.getEventsByUserId(user["userid"]) - - #check if cardid exist + + #check if cardid exist #exist return dict #not exist return none def getInfoBycardid(self,cardid): - cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="select * from info where cardid=%s" param=(cardid,) cursor.execute(sql,param) @@ -73,76 +75,40 @@ def getInfoBycardid(self,cardid): #pre condiction:no user.name,info.cardid duplicate #after : insert new user,new info def register(self,content): - cursor = self.db.cursor() - - sql = "insert into user(name,kind,password) values(%s,%s,%s)" - param = (content["username"],content["kind"],content["password"]) - cursor.execute(sql,param) - self.db.commit() - - cursor.execute('SELECT LAST_INSERT_ID()') - result=cursor.fetchone() - print result[0] - - sql = "insert into info(id,cardid,name,sex,age,address,illness,credit,score) values(%s,%s,%s,%s,%s,%s,%s,%s,%s)" - param = (result[0],content["cardid"],content["realname"],content["sex"],content["age"],content["address"],content["illness"],0,0) - cursor.execute(sql,param) - self.db.commit() - - cursor.close() - return - - #insert support mseeage in event - #pre condiction:user.id,event.id exist;event.state = 0 - #after: uptate assist in event - def supportmessageinsert(self,content): - cursor = self.db.cursor() - sql ="update event set assist= %s where id = %s" - param = (content["assist"],content["eventid"]) - cursor.execute(sql,param) - self.db.commit() - cursor.close() - return + cursor = self.db.cursor() + sql = "insert into user(name,kind,password) values(%s,%s,%s)" + param = (content["username"],content["kind"],content["password"]) + cursor.execute(sql,param) + self.db.commit() - #get all relativeName by user.id - def getAllRelativeNamebyUid(self,uid): - return + cursor.execute('SELECT LAST_INSERT_ID()') + result=cursor.fetchone() + print result[0] + sql = "insert into info(id,cardid,name,sex,age,address,illness,credit,score) values(%s,%s,%s,%s,%s,%s,%s,%s,%s)" + param = (result[0],content["cardid"],content["realname"],content["sex"],content["age"],content["address"],content["illness"],0,0) + cursor.execute(sql,param) + self.db.commit() - '''Yeqin Zheng, 09/07/2014''' - def getRelationByUserId(self, u_name, r_name): - result = self.getUserByUserName(u_name) - u_id = str(result["id"]) - result = self.getUserByUserName(r_name) - r_id = str(result["id"]) - cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="SELECT * FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'" - cursor.execute(sql) - row = int(cursor.rowcount) cursor.close() - return row - - def deleteRelationByUserId(self, u_name, r_name): - result = self.getUserByUserName(u_name) - u_id = str(result["id"]) - result = self.getUserByUserName(r_name) - r_id = str(result["id"]) - cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="DELETE FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'" - cursor.execute(sql) + return + + #insert support mseeage in event + #pre condiction:user.id,event.id exist;event.state = 0 + #after: uptate assist in event + def supportmessageinsert(self,content): + cursor = self.db.cursor() + sql ="update event set assist= %s where id = %s" + param = (content["assist"],content["eventid"]) + cursor.execute(sql,param) + self.db.commit() cursor.close() + return - def addRelationByUserId(self, u_name, r_name): - result = self.getUserByUserName(u_name) - u_id = str(result["id"]) - result = self.getUserByUserName(r_name) - r_id = str(result["id"]) - cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="INSERT INTO relation (usrid, cid, kind) VALUES ('" + u_id + "', '" + r_id + "', '1')" - cursor.execute(sql) - cursor.close() + #get all relativeName by user.id + def getAllRelativeNamebyUid(self,uid): + return - '''.''' '''Yeqin Zheng, 09/07/2014''' def getRelationByUserId(self, u_name, r_name): @@ -177,7 +143,5 @@ def addRelationByUserId(self, u_name, r_name): cursor.execute(sql) cursor.close() - '''.''' - def __del__(self): self.db.close() diff --git a/code/handler/FinishHandler.py b/code/handler/FinishHandler.py index d01b2ff..17f74bf 100644 --- a/code/handler/FinishHandler.py +++ b/code/handler/FinishHandler.py @@ -6,15 +6,15 @@ import dbapi class FinishHandler(tornado.web.RequestHandler): def post(self): - #username = self.get_argument("username") - #eventid = self.get_argument("eventid") + #username = self.get_argument("username") + #eventid = self.get_argument("eventid") event = self.application.dbapi.getEventByEventId(eventid) if(event is None): self.write("{'state':1}") print "event not exist" return rNamelist = self.application.dbapi.getAllRelativeNamebyUid(event["usrid"]) - if() + #if() self.application.dbapi.updateEstate(username,eventid) self.write("FinishHandler") \ No newline at end of file diff --git a/code/handler/LoginHandler.py b/code/handler/LoginHandler.py index d7ea99e..448bad0 100644 --- a/code/handler/LoginHandler.py +++ b/code/handler/LoginHandler.py @@ -13,7 +13,7 @@ def post(self): self.write("{'state':1}") print "username not exist" return - if(user["password"]!= passwd) + if(user["password"]!= passwd): self.write("{'state':2}") print "passwd incorrect" return diff --git a/code/index.html b/code/index.html index f6f293d..b25a9e0 100644 --- a/code/index.html +++ b/code/index.html @@ -6,33 +6,13 @@
- + - +
- - /api/addrelatives -
- - - - - -
- - /api/deleterelatives -
- - - - - -
- - \ No newline at end of file diff --git a/code/main.py b/code/main.py index 2ccc35d..e03a065 100644 --- a/code/main.py +++ b/code/main.py @@ -51,7 +51,7 @@ def __init__(self): (r"/api/deleterelatives",DeleterelativesHandler.DeleterelativesHandler), (r"/api/addrelatives",AddrelativesHandler.AddrelativesHandler), (r"/api/history",HistoryHandler.HistoryHandler), - (r"/api/helpmessage",HelpmessageHandler.HelpmessageHandler), + (r"/api/helpmessage",HelpmessageHandler.HelpMessageHandler), (r"/api/supportmessage",SupportmessageHandler.SupportmessageHandler), (r"/api/finish",FinishHandler.FinishHandler), (r"/api/givecredit",GivecreditHandler.GivecreditHandler), diff --git "a/\346\226\207\346\241\243/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" "b/\346\226\207\346\241\243/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" index b38ebd901f81a2cc989803a7698e608af52849ea..1f708ad29432a3f59285bd40cb8ba57fbed7ffb4 100644 GIT binary patch literal 19456 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 Date: Thu, 10 Jul 2014 09:40:17 +0800 Subject: [PATCH 11/66] Update db.sql --- db.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/db.sql b/db.sql index 06b4307..66aafd8 100644 --- a/db.sql +++ b/db.sql @@ -42,7 +42,7 @@ longitude:纬度 CREATE TABLE info ( id int NOT NULL, - cardid varchar(50) NOT NULL, + cardid varchar(50) NOT NULL, name varchar(50) NOT NULL, sex int, age int, From 39cbc9a06f898d4f9925e92488042d30c3c0694d Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Thu, 10 Jul 2014 10:19:42 +0800 Subject: [PATCH 12/66] =?UTF-8?q?update=20da.sql=20by=E6=B1=9F=E5=98=89?= =?UTF-8?q?=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- db.sql | 1 + ...45\217\260API\346\226\207\346\241\243.doc" | Bin 19456 -> 19456 bytes 2 files changed, 1 insertion(+) rename "\346\226\207\346\241\243/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" => "doc/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" (97%) diff --git a/db.sql b/db.sql index 06b4307..e15d19d 100644 --- a/db.sql +++ b/db.sql @@ -20,6 +20,7 @@ CREATE TABLE user name varchar(50) NOT NULL, kind int NOT NULL, password varchar(30), + cid varchar(40), primary key(id), unique(name) ); diff --git "a/\346\226\207\346\241\243/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" "b/doc/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" similarity index 97% rename from "\346\226\207\346\241\243/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" rename to "doc/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" index 1f708ad29432a3f59285bd40cb8ba57fbed7ffb4..094a6cea7cdd6ade92a9e661e8a458aa9aad756d 100644 GIT binary patch delta 86 zcmZpe!Pqc^aYGIZtHGlk{~m5GWRYQIk=h7kP2?=JVC7_BVBnn0?qtizx!KjJi-oa# d^98qHCaDf)1_lrY0Y)H%u{)SI+j<^m0syqu7R&$u delta 86 zcmZpe!Pqc^aYGIZYrwI97dJN-vdFNq9AyKtCUO>9uyQakFmOy}cd}*V*zD@m#lmR0 c`GQ+8lhk6MI0%CPBM`#aiy1cCdLCv10EV6xO8@`> From 5de9f7962e6bf1d2b9f608dc28098926288ffa9b Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Thu, 10 Jul 2014 14:00:38 +0800 Subject: [PATCH 13/66] =?UTF-8?q?FinishHandler=20v1=20by=E6=B1=9F=E5=98=89?= =?UTF-8?q?=E6=88=90=2007.10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/dbapi.py | 31 +++++++++++++++++++++++++++++++ code/handler/FinishHandler.py | 24 +++++++++++++++--------- 2 files changed, 46 insertions(+), 9 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 677df11..49d0f1c 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -93,6 +93,17 @@ def register(self,content): cursor.close() return + #update user cid by uid + #untest + def UpdateCidByuid(self,cid,uid): + cursor = self.db.cursor() + sql = "update user set cid = %s where id = %s" + param = (cid,uid) + cursor.execute(sql,param) + self.db.commit() + cursor.close() + return + #insert support mseeage in event #pre condiction:user.id,event.id exist;event.state = 0 #after: uptate assist in event @@ -106,7 +117,27 @@ def supportmessageinsert(self,content): return #get all relativeName by user.id + #return a list contain all relations(including uid) def getAllRelativeNamebyUid(self,uid): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select * from relation where usrid = %s" + param = (uid,) + rlist = [] + rlist.append(uid) + cursor.execute(sql,param) + for row in cursor.fetchall(): + rlist.append(row["cid"]) + return rlist + + # change a event sate to 1 + #in order to end a event + def changeEventState(self,eid): + cursor = self.db.cursor() + sql ="update event set state= %s where id = %s" + param = (1,eid) + cursor.execute(sql,param) + self.db.commit() + cursor.close() return diff --git a/code/handler/FinishHandler.py b/code/handler/FinishHandler.py index 17f74bf..6d2703a 100644 --- a/code/handler/FinishHandler.py +++ b/code/handler/FinishHandler.py @@ -1,20 +1,26 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,sys,json -sys.path.append("..") -import dbapi +import os,json + class FinishHandler(tornado.web.RequestHandler): def post(self): - #username = self.get_argument("username") - #eventid = self.get_argument("eventid") + #username = self.get_argument("username") + #eventid = self.get_argument("eventid") + username = "oo11o" + eventid = 1 + uid = self.application.dbapi.getUserByUserName(username)["id"] event = self.application.dbapi.getEventByEventId(eventid) if(event is None): self.write("{'state':1}") print "event not exist" return rNamelist = self.application.dbapi.getAllRelativeNamebyUid(event["usrid"]) - #if() - self.application.dbapi.updateEstate(username,eventid) - - self.write("FinishHandler") \ No newline at end of file + print rNamelist + if(uid not in rNamelist): + self.write("{'state':2}") + print "user not relative or itself,can not update sate" + return + self.application.dbapi.changeEventState(eventid); + self.write("FinishHandler") + return \ No newline at end of file From cb0e2c3fb7df57936fc1ed841b43741ac8f0c545 Mon Sep 17 00:00:00 2001 From: Anton Zhong Date: Thu, 10 Jul 2014 15:17:06 +0800 Subject: [PATCH 14/66] Change Indentation From Space To Tab, Add Handlers --- code/dbapi.py | 136 ++++++++++++++++++------- code/handler/AddaidHandler.py | 4 +- code/handler/AddrelativesHandler.py | 20 ++-- code/handler/AuthenHandler.py | 4 +- code/handler/CancelHandler.py | 4 +- code/handler/CheckrelativesHandler.py | 4 +- code/handler/DeleterelativesHandler.py | 24 ++--- code/handler/EventHandler.py | 12 ++- code/handler/FinishHandler.py | 4 +- code/handler/GivecreditHandler.py | 12 ++- code/handler/HelpmessageHandler.py | 13 ++- code/handler/HistoryHandler.py | 11 +- code/handler/LoginHandler.py | 4 +- code/handler/LogoutHandler.py | 4 +- code/handler/QuitaidHandler.py | 4 +- code/handler/RegisterHandler.py | 34 +++---- code/handler/SendsupportHandler.py | 13 ++- code/handler/SupportmessageHandler.py | 52 +++++----- code/handler/__init__.py | 31 +++--- code/main.py | 41 ++++---- template/dbapi.py | 33 ------ template/history.py | 29 ------ template/index.html | 17 ---- template/static/tornado_static_path | 0 24 files changed, 255 insertions(+), 255 deletions(-) delete mode 100644 template/dbapi.py delete mode 100644 template/history.py delete mode 100644 template/index.html delete mode 100644 template/static/tornado_static_path diff --git a/code/dbapi.py b/code/dbapi.py index aeb5902..16a97bf 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -9,8 +9,8 @@ class dbapi: def __init__(self): self.host="localhost" - self.user="comhelp" - self.passwd="20140629" + self.user="root" + self.passwd="root" self.dbname="community" self.charset="utf8" self.db=MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.dbname,charset=self.charset) @@ -55,13 +55,13 @@ def getEventsByUserName(self,username): user=self.getUserByUserName(username) if(not user): return [] - return self.getEventsByUserId(user["userid"]) + return self.getEventsByUserId(user["id"]) - #check if cardid exist + #check if cardid exist #exist return dict #not exist return none def getInfoBycardid(self,cardid): - cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="select * from info where cardid=%s" param=(cardid,) cursor.execute(sql,param) @@ -73,36 +73,36 @@ def getInfoBycardid(self,cardid): #pre condiction:no user.name,info.cardid duplicate #after : insert new user,new info def register(self,content): - cursor = self.db.cursor() - - sql = "insert into user(name,kind,password) values(%s,%s,%s)" - param = (content["username"],content["kind"],content["password"]) - cursor.execute(sql,param) - self.db.commit() - - cursor.execute('SELECT LAST_INSERT_ID()') - result=cursor.fetchone() - print result[0] - - sql = "insert into info(id,cardid,name,sex,age,address,illness,credit,score) values(%s,%s,%s,%s,%s,%s,%s,%s,%s)" - param = (result[0],content["cardid"],content["realname"],content["sex"],content["age"],content["address"],content["illness"],0,0) - cursor.execute(sql,param) - self.db.commit() - - cursor.close() - return - - #insert support mseeage in event - #pre condiction:user.id,event.id exist;event.state = 0 - #after: uptate assist in event - def supportmessageinsert(self,content): - cursor = self.db.cursor() - sql ="update event set assist= %s where id = %s" - param = (content["assist"],content["eventid"]) - cursor.execute(sql,param) - self.db.commit() - cursor.close() - return + cursor = self.db.cursor() + + sql = "insert into user(name,kind,password) values(%s,%s,%s)" + param = (content["username"],content["kind"],content["password"]) + cursor.execute(sql,param) + self.db.commit() + + cursor.execute('SELECT LAST_INSERT_ID()') + result=cursor.fetchone() + print result[0] + + sql = "insert into info(id,cardid,name,sex,age,address,illness,credit,score) values(%s,%s,%s,%s,%s,%s,%s,%s,%s)" + param = (result[0],content["cardid"],content["realname"],content["sex"],content["age"],content["address"],content["illness"],0,0) + cursor.execute(sql,param) + self.db.commit() + + cursor.close() + return + + #insert support mseeage in event + #pre condiction:user.id,event.id exist;event.state = 0 + #after: uptate assist in event + def supportmessageinsert(self,content): + cursor = self.db.cursor() + sql ="update event set assist= %s where id = %s" + param = (content["assist"],content["eventid"]) + cursor.execute(sql,param) + self.db.commit() + cursor.close() + return def getRelationByUserId(self, u_id, r_id): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) @@ -178,18 +178,76 @@ def addEventByUserName(self,username,message): if(not("kind" in message and "content" in message)): return {"errorCode":403,"errorDesc":"Messge Incomplete"} else: - sql="insert into event (usrid,kind,state,content) values (%s,%s,%s)" - param=(message["usrid"],0,message["content"]) + sql="insert into event (usrid,kind,state,content) values (%s,%s,%s,%s)" + param=(usrid["id"],message["kind"],0,message["content"]) if("assist" in message): - sql="insert into event (usrid,kind,state,content,assist) values (%s,%s,%s,%s)" - param=(message["usrid"],0,message["content"],message["assits"]) + sql="insert into event (usrid,kind,state,content,assist) values (%s,%s,%s,%s,%s)" + param=(usrid["id"],message["kind"],0,message["content"],message["assist"]) cursor.execute(sql,param) + self.db.commit() #return last insert id cursor.execute("select last_insert_id()") return {"errorCode":200,"errorDesc":"","eventid":cursor.fetchone()["last_insert_id()"]} + cursor.close() #07/09 + #Anton Zhong + def getHelperByEventIdAndUserName(self,eid,username): + usrid=self.getUserIdByUserName(username) + #No such user return none + if(not usrid): + return None + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select * from helper where eid=%s and usrid=%s" + param=(eid,usrid["id"]) + cursor.execute(sql,param) + result=cursor.fetchone() + cursor.close() + return result + + def checkHelperByEventIdAndUserName(self,eid,username): + usrid=self.getUserIdByUserName(username) + if(not usrid): + return False + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select usrid from helper where eid=%s" + param=(eid,) + cursor.execute(sql,param) + result=cursor.fetchone() + if(not result): + return False + return True + + def addSupportByEventIdAndUserName(self,eid,username,message): + if(not self.checkHelperByEventIdAndUserName(eid,username)): + return {"errorCode":403,"errorDesc":"No Such Helper "+str(username)+" in event "+str(eid)} + if(not ("content" in message) ): + return {"errorCode":403,"errorDesc":"Messge Incomplete"} + else: + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="insert into support (eid,usrid,content) values (%s,%s,%s)" + param=(eid,self.getUserIdByUserName(username)["id"],message["content"]) + cursor.execute(sql,param) + self.db.commit() + cursor.execute("select last_insert_id()") + result=cursor.fetchone() + cursor.close() + return {"errorCode":200,"errorDesc":"","supportid":result["last_insert_id()"]} + + def setCreditByEventIdAndUserName(self,eid,username,credit): + if(not self.checkHelperByEventIdAndUserName(eid,username)): + return {"errorCode":403,"errorDesc":"No Such Helper "+str(username)+" in event "+str(eid)} + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="update helper set credit = %s where eid=%s and usrid=%s" + usrid=self.getUserIdByUserName(username) + param=(credit,eid,usrid["id"]) + cursor.execute(sql,param) + self.db.commit() + cursor.close() + return {"errorCode":200,"errorDesc":""} + #07/10 + def __del__(self): self.db.close() diff --git a/code/handler/AddaidHandler.py b/code/handler/AddaidHandler.py index 47ebb4e..21c6da6 100644 --- a/code/handler/AddaidHandler.py +++ b/code/handler/AddaidHandler.py @@ -3,5 +3,5 @@ import tornado.httpserver import os,dbapi class AddaidHandler(tornado.web.RequestHandler): - def post(self): - self.write("AddaidHandler") + def post(self): + self.write("

AddaidHandler

") diff --git a/code/handler/AddrelativesHandler.py b/code/handler/AddrelativesHandler.py index 56df501..44c51e0 100644 --- a/code/handler/AddrelativesHandler.py +++ b/code/handler/AddrelativesHandler.py @@ -7,15 +7,15 @@ class AddrelativesHandler(tornado.web.RequestHandler): - def post(self): - u_name = self.get_argument('u_name') - r_name = self.get_argument('r_name') + def post(self): + u_name = self.get_argument('u_name') + r_name = self.get_argument('r_name') - row = self.application.dbapi.getRelationByUserId(u_name, r_name) - if row == 0: - self.application.dbapi.addRelationByUserId(u_name, r_name) - add_message = {'state': 1} - else: - add_message = {'state': 0} + row = self.application.dbapi.getRelationByUserId(u_name, r_name) + if row == 0: + self.application.dbapi.addRelationByUserId(u_name, r_name) + add_message = {'state': 1} + else: + add_message = {'state': 0} - self.write(add_message) + self.write(add_message) diff --git a/code/handler/AuthenHandler.py b/code/handler/AuthenHandler.py index 87385eb..df2f1c4 100644 --- a/code/handler/AuthenHandler.py +++ b/code/handler/AuthenHandler.py @@ -3,5 +3,5 @@ import tornado.httpserver import os,dbapi class AuthenHandler(tornado.web.RequestHandler): - def post(self): - self.write("AuthenHandler") + def post(self): + self.write("AuthenHandler") diff --git a/code/handler/CancelHandler.py b/code/handler/CancelHandler.py index 752746e..80917dc 100644 --- a/code/handler/CancelHandler.py +++ b/code/handler/CancelHandler.py @@ -3,5 +3,5 @@ import tornado.httpserver import os,dbapi class CancelHandler(tornado.web.RequestHandler): - def post(self): - self.write("CancelHandler") + def post(self): + self.write("CancelHandler") diff --git a/code/handler/CheckrelativesHandler.py b/code/handler/CheckrelativesHandler.py index 9745dd5..d3b8752 100644 --- a/code/handler/CheckrelativesHandler.py +++ b/code/handler/CheckrelativesHandler.py @@ -3,5 +3,5 @@ import tornado.httpserver import os,dbapi class CheckrelativesHandler(tornado.web.RequestHandler): - def post(self): - self.write("CheckrelativesHandler") + def post(self): + self.write("CheckrelativesHandler") diff --git a/code/handler/DeleterelativesHandler.py b/code/handler/DeleterelativesHandler.py index 5186b45..6f4f2d2 100644 --- a/code/handler/DeleterelativesHandler.py +++ b/code/handler/DeleterelativesHandler.py @@ -6,18 +6,18 @@ import dbapi class DeleterelativesHandler(tornado.web.RequestHandler): - def post(self): - #self.write(u_id + r_id) - u_name = self.get_argument('u_name') - r_name = self.get_argument('r_name') + def post(self): + #self.write(u_id + r_id) + u_name = self.get_argument('u_name') + r_name = self.get_argument('r_name') - row = self.application.dbapi.getRelationByUserId(u_name, r_name) + row = self.application.dbapi.getRelationByUserId(u_name, r_name) - #self.write(row2) - if row == 0 : - delete_message = {'state': 0} - else : - self.application.dbapi.deleteRelationByUserId(u_name, r_name) - delete_message = {'state': 1} + #self.write(row2) + if row == 0 : + delete_message = {'state': 0} + else : + self.application.dbapi.deleteRelationByUserId(u_name, r_name) + delete_message = {'state': 1} - self.write(delete_message) + self.write(delete_message) diff --git a/code/handler/EventHandler.py b/code/handler/EventHandler.py index bfd2fbb..b856b44 100644 --- a/code/handler/EventHandler.py +++ b/code/handler/EventHandler.py @@ -1,15 +1,17 @@ import tornado.ioloop import tornado.web import tornado.httpserver +import json class EventHandler(tornado.web.RequestHandler): def get(self): - self.write("eventHandler") + self.write("

eventHandler

") + def post(self): - name=self.get_argument("name") - iden=self.get_argument("id") - event=self.application.dbapi.getEventByEventId(iden) + content='{"eventid":1}' + jobj=json.loads(content) + event=self.application.dbapi.getEventByEventId(jobj['eventid']) if(event): self.write(str(event)) else: - self.write("No event for id "+str(iden)) \ No newline at end of file + self.write("No event for eventid: "+str(jobj['eventid'])) \ No newline at end of file diff --git a/code/handler/FinishHandler.py b/code/handler/FinishHandler.py index d142506..2727a93 100644 --- a/code/handler/FinishHandler.py +++ b/code/handler/FinishHandler.py @@ -3,5 +3,5 @@ import tornado.httpserver import os,dbapi class FinishHandler(tornado.web.RequestHandler): - def post(self): - self.write("FinishHandler") + def post(self): + self.write("FinishHandler") diff --git a/code/handler/GivecreditHandler.py b/code/handler/GivecreditHandler.py index ce09dff..b60b227 100644 --- a/code/handler/GivecreditHandler.py +++ b/code/handler/GivecreditHandler.py @@ -1,7 +1,13 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,dbapi +import json + class GivecreditHandler(tornado.web.RequestHandler): - def post(self): - self.write("GivecreditHandler") + def get(self): + self.write("

GivecreditHandler

") + def post(self): + content='{"eventid":4,"helpername":"test2","credit":3}' + jobj=json.loads(content) + result=self.application.dbapi.setCreditByEventIdAndUserName(jobj["eventid"],jobj["helpername"],jobj["credit"]) + self.write(str(result)+str(self.application.dbapi.getHelperByEventIdAndUserName(jobj["eventid"],jobj["helpername"]))) \ No newline at end of file diff --git a/code/handler/HelpmessageHandler.py b/code/handler/HelpmessageHandler.py index c22b6e5..134cd43 100644 --- a/code/handler/HelpmessageHandler.py +++ b/code/handler/HelpmessageHandler.py @@ -1,11 +1,14 @@ import tornado.ioloop import tornado.web import tornado.httpserver +import json -class HelpMessageHandler(tornado.web.RequestHandler): +class HelpmessageHandler(tornado.web.RequestHandler): def get(self): - self.write("HelpMessageHandler") + self.write("

HelpmessageHandler

") + def post(self): - name=self.get_argument("name") - msg=self.get_argument("message") - result=self.application.dbapi.addEventByUserName() \ No newline at end of file + content='{"username":"test1","message":{"kind":1,"content":"TestContent","assist":"TestAssist"}}' + jobj=json.loads(content) + result=self.application.dbapi.addEventByUserName(jobj["username"],jobj["message"]) + self.write(str(result)) \ No newline at end of file diff --git a/code/handler/HistoryHandler.py b/code/handler/HistoryHandler.py index 7876a3c..4a397b0 100644 --- a/code/handler/HistoryHandler.py +++ b/code/handler/HistoryHandler.py @@ -1,14 +1,15 @@ import tornado.ioloop import tornado.web import tornado.httpserver +import json class HistoryHandler(tornado.web.RequestHandler): def get(self): - self.write("getHandler") + self.write("

historyHandler

") def post(self): - name=self.get_argument("name") - iden=self.get_argument("id") - his1=self.application.dbapi.getEventsByUserId(iden) - his2=self.application.dbapi.getEventsByUserName(name) + content='{"id":1,"name":"test1"}' + jobj=json.loads(content) + his1=self.application.dbapi.getEventsByUserId(jobj['id']) + his2=self.application.dbapi.getEventsByUserName(jobj['name']) self.write(str([his1,his2])) \ No newline at end of file diff --git a/code/handler/LoginHandler.py b/code/handler/LoginHandler.py index bf9c90b..70ee33c 100644 --- a/code/handler/LoginHandler.py +++ b/code/handler/LoginHandler.py @@ -3,5 +3,5 @@ import tornado.httpserver import os,dbapi class LoginHandler(tornado.web.RequestHandler): - def post(self): - self.write("login") + def post(self): + self.write("login") diff --git a/code/handler/LogoutHandler.py b/code/handler/LogoutHandler.py index 212d295..38aca9b 100644 --- a/code/handler/LogoutHandler.py +++ b/code/handler/LogoutHandler.py @@ -3,5 +3,5 @@ import tornado.httpserver import os,dbapi class LogoutHandler(tornado.web.RequestHandler): - def post(self): - self.write("LogoutHandler") + def post(self): + self.write("LogoutHandler") diff --git a/code/handler/QuitaidHandler.py b/code/handler/QuitaidHandler.py index 83434c6..abfcd47 100644 --- a/code/handler/QuitaidHandler.py +++ b/code/handler/QuitaidHandler.py @@ -3,5 +3,5 @@ import tornado.httpserver import os,dbapi class QuitaidHandler(tornado.web.RequestHandler): - def post(self): - self.write("QuitaidHandler") + def post(self): + self.write("QuitaidHandler") diff --git a/code/handler/RegisterHandler.py b/code/handler/RegisterHandler.py index c139935..3f568ff 100644 --- a/code/handler/RegisterHandler.py +++ b/code/handler/RegisterHandler.py @@ -5,20 +5,20 @@ sys.path.append("..") import dbapi class RegisterHandler(tornado.web.RequestHandler): - def post(self): - #content = self.get_argument("content") - content = '{"username": "ooo","password": 111111,"kind": 1, "cardid":"42434q" ,"realname":"hiii","sex":1,"age":41, "address":"iii","illness":"hijiiii"}' - j = json.loads(content) - if(self.application.dbapi.getUserByUserName(j['username']) is not None): - self.write("{'state':1}") - print "username exist" - return - if(self.application.dbapi.getInfoBycardid(j['cardid']) is not None): - self.write("{'state':2}") - print "cardid exist" - return - - self.application.dbapi.register(j) - self.write("{'state':3}") - print("Register") - return + def post(self): + #content = self.get_argument("content") + content = '{"username": "ooo","password": 111111,"kind": 1, "cardid":"42434q" ,"realname":"hiii","sex":1,"age":41, "address":"iii","illness":"hijiiii"}' + j = json.loads(content) + if(self.application.dbapi.getUserByUserName(j['username']) is not None): + self.write("{'state':1}") + print "username exist" + return + if(self.application.dbapi.getInfoBycardid(j['cardid']) is not None): + self.write("{'state':2}") + print "cardid exist" + return + + self.application.dbapi.register(j) + self.write("{'state':3}") + print("Register") + return diff --git a/code/handler/SendsupportHandler.py b/code/handler/SendsupportHandler.py index 19d6d73..78d33f2 100644 --- a/code/handler/SendsupportHandler.py +++ b/code/handler/SendsupportHandler.py @@ -1,7 +1,14 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,dbapi +import json + class SendsupportHandler(tornado.web.RequestHandler): - def post(self): - self.write("SendsupportHandler") + def get(self): + self.write("

SendsupportHandler

") + + def post(self): + content='{"username":"Anton","eid":4,"message":{"content":"TestContent"}}' + jobj=json.loads(content) + result=self.application.dbapi.addSupportByEventIdAndUserName(jobj["eid"],jobj["username"],jobj["message"]) + self.write(str(result)+str(self.application.dbapi.getEventByEventId(jobj["eid"]))) \ No newline at end of file diff --git a/code/handler/SupportmessageHandler.py b/code/handler/SupportmessageHandler.py index 1a63a01..03a4d09 100644 --- a/code/handler/SupportmessageHandler.py +++ b/code/handler/SupportmessageHandler.py @@ -5,29 +5,29 @@ sys.path.append("..") import dbapi class SupportmessageHandler(tornado.web.RequestHandler): - def post(self): - #content = self.get_argument("content") - content = '{"username": "ooo","eventid": 1,"assist": "ssssssssssssssss"}' - j = json.loads(content) - us = self.application.dbapi.getUserByUserName(j['username']) - if(us is None): - self.write("{'state':1}") - print "username not exist" - return - print us["id"] - - event = self.application.dbapi.getEventByEventId(j['eventid']) - if(event is None): - self.write("{'state':2}") - print "event not exist" - return - if (event['state']==1): - self.write("{'state':3}") - print "event is end" - return - if(us["id"]==event["usrid"]): - self.application.dbapi.supportmessageinsert(j) - self.write("{'state':4}") - print "insert success" - return - return + def post(self): + #content = self.get_argument("content") + content = '{"username": "ooo","eventid": 1,"assist": "ssssssssssssssss"}' + j = json.loads(content) + us = self.application.dbapi.getUserByUserName(j['username']) + if(us is None): + self.write("{'state':1}") + print "username not exist" + return + print us["id"] + + event = self.application.dbapi.getEventByEventId(j['eventid']) + if(event is None): + self.write("{'state':2}") + print "event not exist" + return + if (event['state']==1): + self.write("{'state':3}") + print "event is end" + return + if(us["id"]==event["usrid"]): + self.application.dbapi.supportmessageinsert(j) + self.write("{'state':4}") + print "insert success" + return + return diff --git a/code/handler/__init__.py b/code/handler/__init__.py index 9540260..a5d1991 100644 --- a/code/handler/__init__.py +++ b/code/handler/__init__.py @@ -1,16 +1,17 @@ __all__ = ["RegisterHandler", - "LoginHandler", - "AuthenHandler", - "LogoutHandler", - "CancelHandler", - "CheckrelativesHandler", - "DeleterelativesHandler", - "AddrelativesHandler", - "HistoryHandler", - "HelpmessageHandler", - "SupportmessageHandler", - "FinishHandler", - "GivecreditHandler", - "AddaidHandler", - "SendsupportHandler", - "QuitaidHandler"] + "LoginHandler", + "AuthenHandler", + "LogoutHandler", + "CancelHandler", + "CheckrelativesHandler", + "DeleterelativesHandler", + "AddrelativesHandler", + "HistoryHandler", + "HelpmessageHandler", + "SupportmessageHandler", + "FinishHandler", + "GivecreditHandler", + "AddaidHandler", + "SendsupportHandler", + "QuitaidHandler", + "EventHandler"] diff --git a/code/main.py b/code/main.py index 2ccc35d..8ce9253 100644 --- a/code/main.py +++ b/code/main.py @@ -16,7 +16,7 @@ #register url handler #class RegisterHandler(tornado.web.RequestHandler): # def post(self): - #content = self.get_argument("content") + #content = self.get_argument("content") # content = '{"username": "haha","password": 111111,"kind": 1, "cardid":11301 ,"realname":"hiii","sex":1,"age":41, "address":"iii","illness":"hijiiii"}' # j = json.loads(content) # if(self.application.dbapi.hasuserName(j['username'])): @@ -28,8 +28,8 @@ #login url handler class IndexHandler(tornado.web.RequestHandler): - def get(self): - self.render("index.html") + def get(self): + self.render("index.html") #class authentication @@ -42,23 +42,24 @@ def __init__(self): "debug": True } handlers=[(r"/",IndexHandler), - (r"/api/login",LoginHandler.LoginHandler), - (r"/api/register",RegisterHandler.RegisterHandler), - (r"/api/userauthentication",AuthenHandler.AuthenHandler), - (r"/api/logout",LogoutHandler.LogoutHandler), - (r"/api/cancel",CancelHandler.CancelHandler), - (r"/api/checkrelatives",CheckrelativesHandler.CheckrelativesHandler), - (r"/api/deleterelatives",DeleterelativesHandler.DeleterelativesHandler), - (r"/api/addrelatives",AddrelativesHandler.AddrelativesHandler), - (r"/api/history",HistoryHandler.HistoryHandler), - (r"/api/helpmessage",HelpmessageHandler.HelpmessageHandler), - (r"/api/supportmessage",SupportmessageHandler.SupportmessageHandler), - (r"/api/finish",FinishHandler.FinishHandler), - (r"/api/givecredit",GivecreditHandler.GivecreditHandler), - (r"/api/addaid",AddaidHandler.AddaidHandler), - (r"/api/sendsupport",SendsupportHandler.SendsupportHandler), - (r"/api/quitaid",QuitaidHandler.QuitaidHandler) - ] + (r"/api/login",LoginHandler.LoginHandler), + (r"/api/register",RegisterHandler.RegisterHandler), + (r"/api/userauthentication",AuthenHandler.AuthenHandler), + (r"/api/logout",LogoutHandler.LogoutHandler), + (r"/api/cancel",CancelHandler.CancelHandler), + (r"/api/checkrelatives",CheckrelativesHandler.CheckrelativesHandler), + (r"/api/deleterelatives",DeleterelativesHandler.DeleterelativesHandler), + (r"/api/addrelatives",AddrelativesHandler.AddrelativesHandler), + (r"/api/history",HistoryHandler.HistoryHandler), + (r"/api/helpmessage",HelpmessageHandler.HelpmessageHandler), + (r"/api/supportmessage",SupportmessageHandler.SupportmessageHandler), + (r"/api/finish",FinishHandler.FinishHandler), + (r"/api/givecredit",GivecreditHandler.GivecreditHandler), + (r"/api/addaid",AddaidHandler.AddaidHandler), + (r"/api/sendsupport",SendsupportHandler.SendsupportHandler), + (r"/api/quitaid",QuitaidHandler.QuitaidHandler), + (r"/api/event",EventHandler.EventHandler) + ] tornado.web.Application.__init__(self,handlers,**settings) self.dbapi=dbapi.dbapi() diff --git a/template/dbapi.py b/template/dbapi.py deleted file mode 100644 index 8b95d3d..0000000 --- a/template/dbapi.py +++ /dev/null @@ -1,33 +0,0 @@ -import MySQLdb - -class dbapi: - def __init__(self): - #Change the database config to fit you own pc - self.host="localhost" - self.user="root" - self.passwd="root" - self.dbname="community" - self.charset="utf8" - self.db=MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.dbname,charset=self.charset) - - #Get event By event's id - def getEventById(self,eventid): - cursor=self.db.cursor() - sql="""select * from event where id=%s""" - #Param must to tuple!1 - param=(eventid,) - cursor.execute(sql,param) - result=cursor.fetchall() - cursor.close() - return result - - def getEventsByUserId(self,userid): - cursor=self.db.cursor() - cursor.close() - return 0 - - def write(self): - return "FKU" - - def __del__(self): - self.db.close() diff --git a/template/history.py b/template/history.py deleted file mode 100644 index 091fb51..0000000 --- a/template/history.py +++ /dev/null @@ -1,29 +0,0 @@ -import tornado.ioloop -import tornado.web -import tornado.httpserver -import os,MySQLdb,dbapi - -#Change the handler class and make it to fit your requirement -class historyHandler(tornado.web.RequestHandler): - def get(self): - self.render("index.html") - - def post(self): - username=self.get_argument("username") - print self.application.dbapi.getEventById(1) - -class app(tornado.web.Application): - def __init__(self): - settings={ - "static_path": os.path.join(os.path.dirname(__file__), "static"), - "debug": True, - } - handlers=[(r"/api/history",historyHandler),] - tornado.web.Application.__init__(self,handlers,**settings) - self.dbapi=dbapi.dbapi() - - -if __name__=="__main__": - server=tornado.httpserver.HTTPServer(app()) - server.listen(8080) - tornado.ioloop.IOLoop.instance().start() \ No newline at end of file diff --git a/template/index.html b/template/index.html deleted file mode 100644 index 189e6ff..0000000 --- a/template/index.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - Test - - -
- - - - - - - -
- - \ No newline at end of file diff --git a/template/static/tornado_static_path b/template/static/tornado_static_path deleted file mode 100644 index e69de29..0000000 From 2115784fa10c81024f39cc4f0dd73e00ab4362ed Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Thu, 10 Jul 2014 15:55:18 +0800 Subject: [PATCH 15/66] change --- code/dbapi.py | 2 +- code/index.html | 2 +- ...45\217\260API\346\226\207\346\241\243.doc" | Bin 19456 -> 19456 bytes 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 49d0f1c..2f1ee5c 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -180,7 +180,7 @@ def addaidhelper(self, u_name, e_id): result = self.getEventByEventId(e_id) if result["state"] == 0: return "0" - else : + else: cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="INSERT INTO helper (eid, usrid) VALUES ('" + e_id + "', '" + u_id + "')" cursor.execute(sql) diff --git a/code/index.html b/code/index.html index 4b57ff4..bf40c3b 100644 --- a/code/index.html +++ b/code/index.html @@ -4,7 +4,7 @@ Test -
+ diff --git "a/doc/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" "b/doc/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" index 094a6cea7cdd6ade92a9e661e8a458aa9aad756d..e0375f2775602aead02cbaf7ca4f3ec02275ad6d 100644 GIT binary patch delta 88 zcmZpe!Pqc^aYGIZE5jZC>wh;FvPiSCHmpB??eFG^oP`#wTnr2hT$9 Date: Thu, 10 Jul 2014 17:26:25 +0800 Subject: [PATCH 16/66] =?UTF-8?q?7.10=20can=20run=20version=20by=E6=B1=9F?= =?UTF-8?q?=E5=98=89=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/dbapi.py | 1 + code/handler/AddaidHandler.py | 4 +--- code/handler/AddrelativesHandler.py | 4 +--- code/handler/AuthenHandler.py | 2 +- code/handler/CancelHandler.py | 2 +- code/handler/CheckrelativesHandler.py | 2 +- code/handler/DeleterelativesHandler.py | 18 ++++++++++-------- code/handler/FinishHandler.py | 2 +- code/handler/HistoryHandler.py | 6 +++--- code/handler/LoginHandler.py | 20 ++++++++++++-------- code/handler/RegisterHandler.py | 10 ++++++---- code/handler/SupportmessageHandler.py | 5 ++--- doc/newAPI.doc | Bin 0 -> 26624 bytes 13 files changed, 40 insertions(+), 36 deletions(-) create mode 100644 doc/newAPI.doc diff --git a/code/dbapi.py b/code/dbapi.py index f9b3cb9..b7f7e2b 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -180,6 +180,7 @@ def deleteRelationByUsername(self, u_name, r_name): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="DELETE FROM relation WHERE usrid = '" + u_id + "' AND cid = '" + r_id + "'" cursor.execute(sql) + self.db.commit() cursor.close() def addRelationByUsername(self, u_name, r_name): diff --git a/code/handler/AddaidHandler.py b/code/handler/AddaidHandler.py index 58d9bd3..39e9aec 100644 --- a/code/handler/AddaidHandler.py +++ b/code/handler/AddaidHandler.py @@ -2,9 +2,7 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os, json, sys -sys.path.append("..") -import dbapi +import json ''' Add a helper to an event. Succeed with "1" returned, else with "0". ''' diff --git a/code/handler/AddrelativesHandler.py b/code/handler/AddrelativesHandler.py index 5f67676..5443478 100644 --- a/code/handler/AddrelativesHandler.py +++ b/code/handler/AddrelativesHandler.py @@ -2,9 +2,7 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os, json, sys -sys.path.append("..") -import dbapi +import json ''' Add a relation between two users. Succeed with "1" returned, else with "0". ''' diff --git a/code/handler/AuthenHandler.py b/code/handler/AuthenHandler.py index df2f1c4..187d5e5 100644 --- a/code/handler/AuthenHandler.py +++ b/code/handler/AuthenHandler.py @@ -1,7 +1,7 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,dbapi +import os class AuthenHandler(tornado.web.RequestHandler): def post(self): self.write("AuthenHandler") diff --git a/code/handler/CancelHandler.py b/code/handler/CancelHandler.py index 80917dc..e69ba96 100644 --- a/code/handler/CancelHandler.py +++ b/code/handler/CancelHandler.py @@ -1,7 +1,7 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,dbapi +import os class CancelHandler(tornado.web.RequestHandler): def post(self): self.write("CancelHandler") diff --git a/code/handler/CheckrelativesHandler.py b/code/handler/CheckrelativesHandler.py index d3b8752..9ccf0f1 100644 --- a/code/handler/CheckrelativesHandler.py +++ b/code/handler/CheckrelativesHandler.py @@ -1,7 +1,7 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,dbapi +import os class CheckrelativesHandler(tornado.web.RequestHandler): def post(self): self.write("CheckrelativesHandler") diff --git a/code/handler/DeleterelativesHandler.py b/code/handler/DeleterelativesHandler.py index 17df6f7..49a8b71 100644 --- a/code/handler/DeleterelativesHandler.py +++ b/code/handler/DeleterelativesHandler.py @@ -2,24 +2,26 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os, json, sys -sys.path.append("..") -import dbapi +import json ''' Delete a relation between two users. Succeed with "1" returned, else with "0". ''' class DeleterelativesHandler(tornado.web.RequestHandler): + def get(self): + self.write("

DeleterelativesHandler

") + def post(self): #self.write(u_id + r_id) - u_name = self.get_argument('u_name') - r_name = self.get_argument('r_name') - - row = self.application.dbapi.getRelationByUsername(u_name, r_name) + #u_name = self.get_argument('u_name') + #r_name = self.get_argument('r_name') + content = '{"username1":"ooo","username2":"oo11o"}' + j = json.loads(content) + row = self.application.dbapi.getRelationByUsername(j['username1'],j['username2']) #self.write(row2) if row == 0 : delete_message = {'state': 0} else : - self.application.dbapi.deleteRelationByUsername(u_name, r_name) + self.application.dbapi.deleteRelationByUsername(j['username1'],j['username2']) delete_message = {'state': 1} self.write(delete_message) diff --git a/code/handler/FinishHandler.py b/code/handler/FinishHandler.py index 38f460e..c382295 100644 --- a/code/handler/FinishHandler.py +++ b/code/handler/FinishHandler.py @@ -1,7 +1,7 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,json +import json class FinishHandler(tornado.web.RequestHandler): def post(self): diff --git a/code/handler/HistoryHandler.py b/code/handler/HistoryHandler.py index 4a397b0..69a5f9c 100644 --- a/code/handler/HistoryHandler.py +++ b/code/handler/HistoryHandler.py @@ -8,8 +8,8 @@ def get(self): self.write("

historyHandler

") def post(self): - content='{"id":1,"name":"test1"}' + content='{"id":1,"name":"ooo"}' jobj=json.loads(content) - his1=self.application.dbapi.getEventsByUserId(jobj['id']) + #his1=self.application.dbapi.getEventsByUserId(jobj['id']) his2=self.application.dbapi.getEventsByUserName(jobj['name']) - self.write(str([his1,his2])) \ No newline at end of file + self.write(str(his2)) \ No newline at end of file diff --git a/code/handler/LoginHandler.py b/code/handler/LoginHandler.py index 3fe8cd3..ad7222a 100644 --- a/code/handler/LoginHandler.py +++ b/code/handler/LoginHandler.py @@ -1,23 +1,27 @@ +# -*- coding: utf-8 -*- import tornado.ioloop import tornado.web import tornado.httpserver -import os,sys,json -sys.path.append("..") -import dbapi +import json + class LoginHandler(tornado.web.RequestHandler): + def get(self): + self.write("

LoginHandler

") + def post(self): - username = self.get_argument('username') - passwd = self.get_argument('passwd') - user = self.application.dbapi.getUserByUserName(username) + #username = self.get_argument('username') + #passwd = self.get_argument('passwd') + content = '{"username":"oo","password":"111111"}' + j = json.loads(content) + user = self.application.dbapi.getUserByUserName(j['username']) if(user is None): self.write("{'state':1}") print "username not exist" return - if(user["password"]!= passwd): + if(user["password"]!= j['password']): self.write("{'state':2}") print "passwd incorrect" return self.write("{'state':3}") - print("Login") return diff --git a/code/handler/RegisterHandler.py b/code/handler/RegisterHandler.py index 3f568ff..9189d6a 100644 --- a/code/handler/RegisterHandler.py +++ b/code/handler/RegisterHandler.py @@ -1,13 +1,15 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,sys,json -sys.path.append("..") -import dbapi +import json + class RegisterHandler(tornado.web.RequestHandler): + def get(self): + self.write("

RegisterHandler

") + def post(self): #content = self.get_argument("content") - content = '{"username": "ooo","password": 111111,"kind": 1, "cardid":"42434q" ,"realname":"hiii","sex":1,"age":41, "address":"iii","illness":"hijiiii"}' + content = '{"username": "11oo","password": 111111,"kind": 1, "cardid":"4df2434q" ,"realname":"hiii","sex":1,"age":41, "address":"iii","illness":"hijiiii"}' j = json.loads(content) if(self.application.dbapi.getUserByUserName(j['username']) is not None): self.write("{'state':1}") diff --git a/code/handler/SupportmessageHandler.py b/code/handler/SupportmessageHandler.py index 03a4d09..53ccc5e 100644 --- a/code/handler/SupportmessageHandler.py +++ b/code/handler/SupportmessageHandler.py @@ -1,9 +1,8 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,sys,json -sys.path.append("..") -import dbapi +import json + class SupportmessageHandler(tornado.web.RequestHandler): def post(self): #content = self.get_argument("content") diff --git a/doc/newAPI.doc b/doc/newAPI.doc new file mode 100644 index 0000000000000000000000000000000000000000..8f720d48ae8586884f192f5ec3f5b2ca5669fc7e GIT binary patch literal 26624 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 Date: Fri, 11 Jul 2014 08:49:17 +0800 Subject: [PATCH 17/66] 2014/7/11 by linhu --- code/dbapi.py | 23 +++++++++++++++++++++++ code/handler/CheckrelativesHandler.py | 20 ++++++++++++++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index f9b3cb9..46af8ed 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -33,6 +33,29 @@ def getUserByUserName(self,username): cursor.close() return result + def CheckRelationbyId(self,userid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select cid from relation where relation.usrid=%s" + param=(userid,): + cursor.execute(sql,param) + result1=cursor.fetchall() + result=[] + if result1 is not None: + for x in result1: + cursor.eccute("selcet * from info where info.id=x") + result.append(cursor.fetchone()) + cursor.close() + return result + + def getUsermassegeByUserId(self,userid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select * from user ,info where user.id=%s and info.id=%s" + param=(userid,userid) + cursor.execute(sql,param) + result=cursor.fetchall() + cursor.close() + return result + def getEventByEventId(self,eventid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="select * from event where id=%s" diff --git a/code/handler/CheckrelativesHandler.py b/code/handler/CheckrelativesHandler.py index d3b8752..9b0e523 100644 --- a/code/handler/CheckrelativesHandler.py +++ b/code/handler/CheckrelativesHandler.py @@ -2,6 +2,22 @@ import tornado.web import tornado.httpserver import os,dbapi +import sys,json +sys.path.append("..") + class CheckrelativesHandler(tornado.web.RequestHandler): - def post(self): - self.write("CheckrelativesHandler") + def post(self): + username=self.get_argument("content") + userid=self.application.dbapi.getUserByUserName(username)["id"] + re=self.application.dbapi.CheckRelationbyId(userid) + if re!=[]: + relatives=[] + for row in re: + name=self.application.dbapi.getUsermassegeByUserId(row["cid"]) + relatives.append(name) + data1=[{'state':1},relatives] + data=json.dumps(data1) + else: + data1=[{'state':0}] + data=json.dumps(data1) + self.write(data) From ac3d87437684294e1f992e6b5d30a766e32f3de3 Mon Sep 17 00:00:00 2001 From: dage <641846382@qq.com> Date: Fri, 11 Jul 2014 10:27:23 +0800 Subject: [PATCH 18/66] 2014/7/11 by linhu --- code/dbapi.py | 15 +++++---------- code/handler/CheckrelativesHandler.py | 2 +- code/index.html | 4 ++-- code/main.py | 2 +- 4 files changed, 9 insertions(+), 14 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 46af8ed..46e5093 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -9,8 +9,8 @@ class dbapi: def __init__(self): self.host="localhost" - self.user="root" - self.passwd="root" + self.user="comhelp" + self.passwd="20140629" self.dbname="community" self.charset="utf8" self.db=MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.dbname,charset=self.charset) @@ -35,15 +35,10 @@ def getUserByUserName(self,username): def CheckRelationbyId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="select cid from relation where relation.usrid=%s" - param=(userid,): + sql="select * from relation where usrid=%s" + param=(userid,) cursor.execute(sql,param) - result1=cursor.fetchall() - result=[] - if result1 is not None: - for x in result1: - cursor.eccute("selcet * from info where info.id=x") - result.append(cursor.fetchone()) + result=cursor.fetchall() cursor.close() return result diff --git a/code/handler/CheckrelativesHandler.py b/code/handler/CheckrelativesHandler.py index 9b0e523..b009756 100644 --- a/code/handler/CheckrelativesHandler.py +++ b/code/handler/CheckrelativesHandler.py @@ -10,7 +10,7 @@ def post(self): username=self.get_argument("content") userid=self.application.dbapi.getUserByUserName(username)["id"] re=self.application.dbapi.CheckRelationbyId(userid) - if re!=[]: + if re!=(): relatives=[] for row in re: name=self.application.dbapi.getUsermassegeByUserId(row["cid"]) diff --git a/code/index.html b/code/index.html index bf40c3b..1ffad9b 100644 --- a/code/index.html +++ b/code/index.html @@ -4,9 +4,9 @@ Test -
+ - + diff --git a/code/main.py b/code/main.py index b3deab6..8c60f6b 100644 --- a/code/main.py +++ b/code/main.py @@ -39,5 +39,5 @@ def __init__(self): if __name__=="__main__": server=tornado.httpserver.HTTPServer(app()) - server.listen(8080) + server.listen(8090) tornado.ioloop.IOLoop.instance().start() From 0119aebccff00273f8ae6e28eb30523867a24194 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Fri, 11 Jul 2014 16:03:04 +0800 Subject: [PATCH 19/66] all usercases can run in test version && add new api doc --- code/dbapi.py | 46 ++++++++++++++---- code/handler/AddaidHandler.py | 14 +++--- code/handler/AddrelativesHandler.py | 16 ++++-- code/handler/AuthenHandler.py | 7 ++- code/handler/CancelHandler.py | 7 ++- code/handler/CheckrelativesHandler.py | 20 +++++--- code/handler/DeleterelativesHandler.py | 10 ++-- code/handler/FinishHandler.py | 19 +++++--- code/handler/HelpmessageHandler.py | 6 ++- code/handler/LoginHandler.py | 7 ++- code/handler/LogoutHandler.py | 7 ++- code/handler/QuitaidHandler.py | 25 ++++++++-- code/handler/SendsupportHandler.py | 1 + code/handler/SupportmessageHandler.py | 7 ++- code/index.html | 17 ------- code/main.py | 2 +- doc/newAPI.doc | Bin 26624 -> 35840 bytes ...45\217\260API\346\226\207\346\241\243.doc" | Bin 19456 -> 0 bytes 18 files changed, 138 insertions(+), 73 deletions(-) delete mode 100644 code/index.html delete mode 100644 "doc/\345\220\216\345\217\260API\346\226\207\346\241\243.doc" diff --git a/code/dbapi.py b/code/dbapi.py index 414e5c4..21d73ae 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -9,8 +9,8 @@ class dbapi: def __init__(self): self.host="localhost" - self.user="comhelp" - self.passwd="20140629" + self.user="root" + self.passwd="root" self.dbname="community" self.charset="utf8" self.db=MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.dbname,charset=self.charset) @@ -33,6 +33,7 @@ def getUserByUserName(self,username): cursor.close() return result + def CheckRelationbyId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="select * from relation where usrid=%s" @@ -46,8 +47,10 @@ def getUsermassegeByUserId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="select * from user ,info where user.id=%s and info.id=%s" param=(userid,userid) + #sql="select * from user where user.id=%s" + #param=(userid) cursor.execute(sql,param) - result=cursor.fetchall() + result=cursor.fetchone() cursor.close() return result @@ -209,21 +212,46 @@ def addRelationByUsername(self, u_name, r_name): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="INSERT INTO relation (usrid, cid, kind) VALUES ('" + u_id + "', '" + r_id + "', '1')" cursor.execute(sql) + self.db.commit() cursor.close() def addaidhelper(self, u_name, e_id): result = self.getUserByUserName(u_name) u_id = str(result["id"]) result = self.getEventByEventId(e_id) - if result["state"] == 0: - return "0" + if(self.checkifUseraddHelper(u_id,e_id) is not None): + print "already add in,do not need add agagin" + return "2" + if result["state"] == 1: + print "current has benn end" + return "3" else: cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="INSERT INTO helper (eid, usrid) VALUES ('" + e_id + "', '" + u_id + "')" cursor.execute(sql) + self.db.commit() cursor.close() + print "user " +u_name +" add in "+ e_id return "1" - '''.''' + + def checkifUseraddHelper(self,userid,eventid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select * from helper where eid=%s and usrid = %s" + param=(eventid,userid) + cursor.execute(sql,param) + result=cursor.fetchone() + print result + return result + + def deleteHelperbyUidEid(self,uid,eid): + cursor=self.db.cursor() + sql="delete from helper where eid = %s and usrid = %s" + param=(eid,uid) + cursor.execute(sql,param) + self.db.commit() + cursor.close() + return + #Anton Zhong def getUserIdByUserName(self,username): @@ -239,10 +267,10 @@ def addEventByUserName(self,username,message): usrid=self.getUserIdByUserName(username) cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) if(not usrid): - return {"errorCode":403,"errorDesc":"No Such User: "+username} + return {"state":2,"errorDesc":"No Such User: "+username} else: if(not("kind" in message and "content" in message)): - return {"errorCode":403,"errorDesc":"Messge Incomplete"} + return {"state":3,"errorDesc":"Messge Incomplete"} else: sql="insert into event (usrid,kind,state,content) values (%s,%s,%s,%s)" param=(usrid["id"],message["kind"],0,message["content"]) @@ -254,7 +282,7 @@ def addEventByUserName(self,username,message): #return last insert id cursor.execute("select last_insert_id()") - return {"errorCode":200,"errorDesc":"","eventid":cursor.fetchone()["last_insert_id()"]} + return {"state":1,"errorDesc":"","eventid":cursor.fetchone()["last_insert_id()"]} cursor.close() #07/09 diff --git a/code/handler/AddaidHandler.py b/code/handler/AddaidHandler.py index 39e9aec..1a95c95 100644 --- a/code/handler/AddaidHandler.py +++ b/code/handler/AddaidHandler.py @@ -7,10 +7,12 @@ ''' Add a helper to an event. Succeed with "1" returned, else with "0". ''' class AddaidHandler(tornado.web.RequestHandler): - def post(self): - u_name = self.get_argument('u_name') - e_id = self.get_argument('e_id') - - result = self.application.dbapi.addaidhelper(u_name, e_id) - self.write("{'state': " + result + "}") + def get(self): + self.write("

AddaidHandler

") + def post(self): + #content =self.request.body + content = '{"username":"oo11o","eventid":"4"}' + j = json.loads(content) + result = self.application.dbapi.addaidhelper(j['username'], j['eventid']) + self.write("{'state': " + result + "}") diff --git a/code/handler/AddrelativesHandler.py b/code/handler/AddrelativesHandler.py index 5443478..2824014 100644 --- a/code/handler/AddrelativesHandler.py +++ b/code/handler/AddrelativesHandler.py @@ -7,15 +7,21 @@ ''' Add a relation between two users. Succeed with "1" returned, else with "0". ''' class AddrelativesHandler(tornado.web.RequestHandler): - def post(self): - u_name = self.get_argument('u_name') - r_name = self.get_argument('r_name') + def get(self): + self.write("

AddrelativesHandler

") - row = self.application.dbapi.getRelationByUsername(u_name, r_name) + def post(self): + #content =self.request.body + content = '{"u_name":"ooo","r_name":"11oo"}' + j = json.loads(content) + row = self.application.dbapi.getRelationByUsername(j['u_name'], j['r_name']) if row == 0: - self.application.dbapi.addRelationByUsername(u_name, r_name) + self.application.dbapi.addRelationByUsername(j['u_name'], j['r_name']) add_message = {'state': 1} + print "add relative success" else: add_message = {'state': 0} + print "two already has relative relation" self.write(add_message) + return diff --git a/code/handler/AuthenHandler.py b/code/handler/AuthenHandler.py index 187d5e5..cf94280 100644 --- a/code/handler/AuthenHandler.py +++ b/code/handler/AuthenHandler.py @@ -3,5 +3,8 @@ import tornado.httpserver import os class AuthenHandler(tornado.web.RequestHandler): - def post(self): - self.write("AuthenHandler") + def get(self): + self.write("

AuthenHandler

") + + def post(self): + self.write("AuthenHandler") diff --git a/code/handler/CancelHandler.py b/code/handler/CancelHandler.py index e69ba96..aaadc1e 100644 --- a/code/handler/CancelHandler.py +++ b/code/handler/CancelHandler.py @@ -3,5 +3,8 @@ import tornado.httpserver import os class CancelHandler(tornado.web.RequestHandler): - def post(self): - self.write("CancelHandler") + def get(self): + self.write("

CancelHandler

") + + def post(self): + self.write("CancelHandler") diff --git a/code/handler/CheckrelativesHandler.py b/code/handler/CheckrelativesHandler.py index b464c77..24dab61 100644 --- a/code/handler/CheckrelativesHandler.py +++ b/code/handler/CheckrelativesHandler.py @@ -1,20 +1,26 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os +import os,json class CheckrelativesHandler(tornado.web.RequestHandler): - def post(self): - username=self.get_argument("content") - userid=self.application.dbapi.getUserByUserName(username)["id"] + def get(self): + self.write("

CheckrelativesHandler

") + + def post(self): + #content =self.request.body + content = '{"username":"ooo"}' + j = json.loads(content) + userid=self.application.dbapi.getUserByUserName(j['username'])["id"] re=self.application.dbapi.CheckRelationbyId(userid) if re!=(): relatives=[] for row in re: name=self.application.dbapi.getUsermassegeByUserId(row["cid"]) - relatives.append(name) - data1=[{'state':1},relatives] + print name + relatives.append(name ) + data1={'state':1,'ralatives':relatives} data=json.dumps(data1) else: - data1=[{'state':0}] + data1={'state':1,'relatives':''} data=json.dumps(data1) self.write(data) diff --git a/code/handler/DeleterelativesHandler.py b/code/handler/DeleterelativesHandler.py index 49a8b71..17b7cad 100644 --- a/code/handler/DeleterelativesHandler.py +++ b/code/handler/DeleterelativesHandler.py @@ -11,17 +11,17 @@ def get(self): self.write("

DeleterelativesHandler

") def post(self): - #self.write(u_id + r_id) - #u_name = self.get_argument('u_name') - #r_name = self.get_argument('r_name') - content = '{"username1":"ooo","username2":"oo11o"}' + #content =self.request.body + content = '{"username1":"ooo","username2":"11oo"}' j = json.loads(content) row = self.application.dbapi.getRelationByUsername(j['username1'],j['username2']) - #self.write(row2) if row == 0 : delete_message = {'state': 0} + print "two has no relations" else : self.application.dbapi.deleteRelationByUsername(j['username1'],j['username2']) + print "delete relations success" delete_message = {'state': 1} self.write(delete_message) + return diff --git a/code/handler/FinishHandler.py b/code/handler/FinishHandler.py index c382295..0973ac2 100644 --- a/code/handler/FinishHandler.py +++ b/code/handler/FinishHandler.py @@ -4,13 +4,15 @@ import json class FinishHandler(tornado.web.RequestHandler): + def get(self): + self.write("

FinishHandler

") + def post(self): - #username = self.get_argument("username") - #eventid = self.get_argument("eventid") - username = "oo11o" - eventid = 1 - uid = self.application.dbapi.getUserByUserName(username)["id"] - event = self.application.dbapi.getEventByEventId(eventid) + #content =self.request.body + content = '{"username":"oo121o","eventid":2}' + j = json.loads(content) + uid = self.application.dbapi.getUserByUserName(j['username'])["id"] + event = self.application.dbapi.getEventByEventId(j['eventid']) if(event is None): self.write("{'state':1}") print "event not exist" @@ -21,6 +23,7 @@ def post(self): self.write("{'state':2}") print "user not relative or itself,can not update sate" return - self.application.dbapi.changeEventState(eventid); - self.write("FinishHandler") + self.application.dbapi.changeEventState(j['eventid']); + self.write("{'state':3}") + print "finsh an event" return diff --git a/code/handler/HelpmessageHandler.py b/code/handler/HelpmessageHandler.py index 134cd43..efd5225 100644 --- a/code/handler/HelpmessageHandler.py +++ b/code/handler/HelpmessageHandler.py @@ -8,7 +8,9 @@ def get(self): self.write("

HelpmessageHandler

") def post(self): - content='{"username":"test1","message":{"kind":1,"content":"TestContent","assist":"TestAssist"}}' + #content =self.request.body + content='{"username":"oo","message":{"kind":1,"content":"TestContent","assist":"TestAssist"}}' jobj=json.loads(content) result=self.application.dbapi.addEventByUserName(jobj["username"],jobj["message"]) - self.write(str(result)) \ No newline at end of file + self.write(str(result)) + return \ No newline at end of file diff --git a/code/handler/LoginHandler.py b/code/handler/LoginHandler.py index ad7222a..0e2b879 100644 --- a/code/handler/LoginHandler.py +++ b/code/handler/LoginHandler.py @@ -9,10 +9,13 @@ def get(self): self.write("

LoginHandler

") def post(self): - #username = self.get_argument('username') - #passwd = self.get_argument('passwd') + #content =self.request.body content = '{"username":"oo","password":"111111"}' j = json.loads(content) + if(j['username'].strip()=='' or j['password'].strip()==''): + self.write("{'state':1}") + print "username or password is null" + return user = self.application.dbapi.getUserByUserName(j['username']) if(user is None): self.write("{'state':1}") diff --git a/code/handler/LogoutHandler.py b/code/handler/LogoutHandler.py index 38aca9b..efe4548 100644 --- a/code/handler/LogoutHandler.py +++ b/code/handler/LogoutHandler.py @@ -3,5 +3,8 @@ import tornado.httpserver import os,dbapi class LogoutHandler(tornado.web.RequestHandler): - def post(self): - self.write("LogoutHandler") + def get(self): + self.write("

LogoutHandler

") + + def post(self): + self.write("LogoutHandler") diff --git a/code/handler/QuitaidHandler.py b/code/handler/QuitaidHandler.py index abfcd47..7c099e7 100644 --- a/code/handler/QuitaidHandler.py +++ b/code/handler/QuitaidHandler.py @@ -1,7 +1,26 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,dbapi +import os,json class QuitaidHandler(tornado.web.RequestHandler): - def post(self): - self.write("QuitaidHandler") + def get(self): + self.write("

QuitaidHandler

") + + def post(self): + #content =self.request.body + content = '{"username":"oo11o","eventid":5}' + j = json.loads(content) + uid = self.application.dbapi.getUserByUserName(j['username'])['id'] + if(self.application.dbapi.getEventByEventId(j['eventid'])['state'] == 1): + print "current had been end,you can not quit" + self.write("{'state':3}") + return + + if(self.application.dbapi.checkifUseraddHelper(uid,j['eventid']) is None): + print "user " + j['username'] +" do not add the aid first" + self.write("{'state':2}") + return + self.application.dbapi.deleteHelperbyUidEid(uid,j['eventid']) + print "quit success" + self.write("{'state':1}") + return diff --git a/code/handler/SendsupportHandler.py b/code/handler/SendsupportHandler.py index 78d33f2..65eb9d5 100644 --- a/code/handler/SendsupportHandler.py +++ b/code/handler/SendsupportHandler.py @@ -8,6 +8,7 @@ def get(self): self.write("

SendsupportHandler

") def post(self): + #content =self.request.body content='{"username":"Anton","eid":4,"message":{"content":"TestContent"}}' jobj=json.loads(content) result=self.application.dbapi.addSupportByEventIdAndUserName(jobj["eid"],jobj["username"],jobj["message"]) diff --git a/code/handler/SupportmessageHandler.py b/code/handler/SupportmessageHandler.py index 53ccc5e..8f800d1 100644 --- a/code/handler/SupportmessageHandler.py +++ b/code/handler/SupportmessageHandler.py @@ -4,9 +4,12 @@ import json class SupportmessageHandler(tornado.web.RequestHandler): + def get(self): + self.write("

SupportmessageHandler

") + def post(self): - #content = self.get_argument("content") - content = '{"username": "ooo","eventid": 1,"assist": "ssssssssssssssss"}' + #content =self.request.body + content = '{"username": "ooo","eventid": 3,"assist": "ssssssssssssssss"}' j = json.loads(content) us = self.application.dbapi.getUserByUserName(j['username']) if(us is None): diff --git a/code/index.html b/code/index.html deleted file mode 100644 index 1ffad9b..0000000 --- a/code/index.html +++ /dev/null @@ -1,17 +0,0 @@ - - - - Test - - -
- - - - - - - -
- - \ No newline at end of file diff --git a/code/main.py b/code/main.py index 8c60f6b..b3deab6 100644 --- a/code/main.py +++ b/code/main.py @@ -39,5 +39,5 @@ def __init__(self): if __name__=="__main__": server=tornado.httpserver.HTTPServer(app()) - server.listen(8090) + server.listen(8080) tornado.ioloop.IOLoop.instance().start() diff --git a/doc/newAPI.doc b/doc/newAPI.doc index 8f720d48ae8586884f192f5ec3f5b2ca5669fc7e..4424556e1b2a811ff7ff9a993297ea2bb5cab726 100644 GIT binary patch delta 7055 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 delta 3285 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 AeE Date: Mon, 14 Jul 2014 09:42:07 +0800 Subject: [PATCH 20/66] change db(event) --- code/dbapi.py | 10 ++++++++++ code/handler/AddrelativesHandler.py | 2 +- code/handler/LoginHandler.py | 3 ++- code/handler/LogoutHandler.py | 10 ++++++++-- code/handler/RegisterHandler.py | 2 +- db.sql | 18 ++++++++++++++---- 6 files changed, 36 insertions(+), 9 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 21d73ae..8b17a22 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -33,6 +33,16 @@ def getUserByUserName(self,username): cursor.close() return result + def updateUserstate(self,uid,state): + cursor = self.db.cursor() + sql = "update user set state = %s where id = %s" + param =(state,uid) + cursor.execute(sql,param) + self.db.commit() + cursor.close() + return + + def CheckRelationbyId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) diff --git a/code/handler/AddrelativesHandler.py b/code/handler/AddrelativesHandler.py index 2824014..2d91b08 100644 --- a/code/handler/AddrelativesHandler.py +++ b/code/handler/AddrelativesHandler.py @@ -12,7 +12,7 @@ def get(self): def post(self): #content =self.request.body - content = '{"u_name":"ooo","r_name":"11oo"}' + content = '{"u_name":"test1","r_name":"test2"}' j = json.loads(content) row = self.application.dbapi.getRelationByUsername(j['u_name'], j['r_name']) if row == 0: diff --git a/code/handler/LoginHandler.py b/code/handler/LoginHandler.py index 0e2b879..4409d70 100644 --- a/code/handler/LoginHandler.py +++ b/code/handler/LoginHandler.py @@ -10,7 +10,7 @@ def get(self): def post(self): #content =self.request.body - content = '{"username":"oo","password":"111111"}' + content = '{"username":"test","password":"test"}' j = json.loads(content) if(j['username'].strip()=='' or j['password'].strip()==''): self.write("{'state':1}") @@ -25,6 +25,7 @@ def post(self): self.write("{'state':2}") print "passwd incorrect" return + self.application.dbapi.updateUserstate(user['id'],1) self.write("{'state':3}") print("Login") return diff --git a/code/handler/LogoutHandler.py b/code/handler/LogoutHandler.py index efe4548..da7ac74 100644 --- a/code/handler/LogoutHandler.py +++ b/code/handler/LogoutHandler.py @@ -1,10 +1,16 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,dbapi +import json class LogoutHandler(tornado.web.RequestHandler): def get(self): self.write("

LogoutHandler

") def post(self): - self.write("LogoutHandler") + #content =self.request.body + content = '{"username":"11oo"}' + j = json.loads(content) + uid = self.application.dbapi.getUserByUserName(j['username'])['id'] + self.application.dbapi.updateUserstate(uid,0) + self.write("{'state':1}") + print("Logout success") \ No newline at end of file diff --git a/code/handler/RegisterHandler.py b/code/handler/RegisterHandler.py index 9189d6a..8553716 100644 --- a/code/handler/RegisterHandler.py +++ b/code/handler/RegisterHandler.py @@ -9,7 +9,7 @@ def get(self): def post(self): #content = self.get_argument("content") - content = '{"username": "11oo","password": 111111,"kind": 1, "cardid":"4df2434q" ,"realname":"hiii","sex":1,"age":41, "address":"iii","illness":"hijiiii"}' + content = '{"username": "test2","password": "test2","kind": 1, "cardid":"test2" ,"realname":"realtest2","sex":1,"age":41, "address":"iii","illness":"hijiiii"}' j = json.loads(content) if(self.application.dbapi.getUserByUserName(j['username']) is not None): self.write("{'state':1}") diff --git a/db.sql b/db.sql index 931485e..071bf0a 100644 --- a/db.sql +++ b/db.sql @@ -11,8 +11,9 @@ drop table IF EXISTS user; id:自增id name:登录用户名 kind:用户类型(普通用户,认证用户,第三方机构等) -info:用户具体信息(对应info表中的id) password:用户密码(md5加密) +cid:推送令牌 +state:在线状态0-不在线,1-表示在线 */ CREATE TABLE user ( @@ -21,6 +22,7 @@ CREATE TABLE user kind int NOT NULL, password varchar(30), cid varchar(40), + state int, primary key(id), unique(name) ); @@ -55,6 +57,7 @@ CREATE TABLE info longitude DECIMAL, primary key(id), foreign key(id) references user(id) + ON DELETE CASCADE ); /* @@ -71,8 +74,9 @@ CREATE TABLE relation cid int NOT NULL, kind int NOT NULL, primary key(id), - foreign key(usrid) references user(id), + foreign key(usrid) references user(id) ON DELETE CASCADE, foreign key(cid) references user(id) + ON DELETE CASCADE ); /* @@ -92,8 +96,11 @@ CREATE TABLE event state int NOT NULL, content blob NOT NULL, assist blob, + latitude DECIMAL, + longitude DECIMAL, primary key(id), foreign key(usrid) references user(id) + ON DELETE CASCADE ); /* @@ -111,8 +118,9 @@ CREATE TABLE helper usrid int NOT NULL, credit int, primary key(id), - foreign key(eid) references event(id), + foreign key(eid) references event(id) ON DELETE CASCADE, foreign key(usrid) references user(id) + ON DELETE CASCADE ); /* @@ -130,8 +138,9 @@ CREATE TABLE support usrid int NOT NULL, content blob NOT NULL, primary key(id), - foreign key(eid) references event(id), + foreign key(eid) references event(id) ON DELETE CASCADE, foreign key(usrid) references user(id) + ON DELETE CASCADE ); /* @@ -143,4 +152,5 @@ CREATE TABLE tpu usrid int NOT NULL, primary key(id), foreign key(usrid) references user(id) + ON DELETE CASCADE )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; From a20649fc1cb21992892becce01d8257254aa8df6 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Mon, 14 Jul 2014 14:56:03 +0800 Subject: [PATCH 21/66] add time in event,support add time in event,support;complete cancle --- code/dbapi.py | 16 +++++++++++----- code/handler/CancelHandler.py | 23 +++++++++++++++++++++-- code/handler/LoginHandler.py | 2 +- code/handler/RegisterHandler.py | 5 +++-- db.sql | 20 ++++++++++++++------ doc/newAPI.doc | Bin 35840 -> 36864 bytes 6 files changed, 50 insertions(+), 16 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 8b17a22..abc40bf 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -42,8 +42,6 @@ def updateUserstate(self,uid,state): cursor.close() return - - def CheckRelationbyId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="select * from relation where usrid=%s" @@ -57,8 +55,6 @@ def getUsermassegeByUserId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="select * from user ,info where user.id=%s and info.id=%s" param=(userid,userid) - #sql="select * from user where user.id=%s" - #param=(userid) cursor.execute(sql,param) result=cursor.fetchone() cursor.close() @@ -188,7 +184,17 @@ def changeEventState(self,eid): self.db.commit() cursor.close() return - + #cancle a user by user(id) + #pre condiction: uid exist + #after:delete all record of this user + def cancelUser(self,uid): + cursor = self.db.cursor() + sql = "delete from user where id = %s" + param = (uid,) + cursor.execute(sql,param) + self.db.commit() + cursor.close() + return '''Yeqin Zheng, 09/07/2014''' def getRelationByUsername(self, u_name, r_name): diff --git a/code/handler/CancelHandler.py b/code/handler/CancelHandler.py index aaadc1e..809f2ae 100644 --- a/code/handler/CancelHandler.py +++ b/code/handler/CancelHandler.py @@ -1,10 +1,29 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os +import json class CancelHandler(tornado.web.RequestHandler): def get(self): self.write("

CancelHandler

") def post(self): - self.write("CancelHandler") + #content = self.get_argument("content") + content = '{"username":"test","password":"test"}' + j = json.loads(content) + if(j['username'].strip()=='' or j['password'].strip()==''): + self.write("{'state':1}") + print "username or password is null,can not cancel" + return + user = self.application.dbapi.getUserByUserName(j['username']) + if(user is None): + self.write("{'state':1}") + print "username not exist,can not cancel" + return + if(user["password"]!= j['password']): + self.write("{'state':2}") + print "passwd incorrect,can not cancel" + return + self.application.dbapi.cancelUser(user['id']) + self.write("{'state':3}") + print("cancel success") + return diff --git a/code/handler/LoginHandler.py b/code/handler/LoginHandler.py index 4409d70..7530010 100644 --- a/code/handler/LoginHandler.py +++ b/code/handler/LoginHandler.py @@ -27,5 +27,5 @@ def post(self): return self.application.dbapi.updateUserstate(user['id'],1) self.write("{'state':3}") - print("Login") + print("Login success") return diff --git a/code/handler/RegisterHandler.py b/code/handler/RegisterHandler.py index 8553716..402cf56 100644 --- a/code/handler/RegisterHandler.py +++ b/code/handler/RegisterHandler.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import tornado.ioloop import tornado.web import tornado.httpserver @@ -9,7 +10,7 @@ def get(self): def post(self): #content = self.get_argument("content") - content = '{"username": "test2","password": "test2","kind": 1, "cardid":"test2" ,"realname":"realtest2","sex":1,"age":41, "address":"iii","illness":"hijiiii"}' + content = '{"username": "你好吗","password": "sda","kind": 1, "cardid":"tests2" ,"realname":"realtest2","sex":1,"age":41, "address":"iii","illness":"hijiiii"}' j = json.loads(content) if(self.application.dbapi.getUserByUserName(j['username']) is not None): self.write("{'state':1}") @@ -19,8 +20,8 @@ def post(self): self.write("{'state':2}") print "cardid exist" return - self.application.dbapi.register(j) + u = self.application.dbapi.getUserByUserName(j['username']); self.write("{'state':3}") print("Register") return diff --git a/db.sql b/db.sql index 071bf0a..0b03c6f 100644 --- a/db.sql +++ b/db.sql @@ -25,7 +25,7 @@ CREATE TABLE user state int, primary key(id), unique(name) -); +)DEFAULT CHARSET=utf8; /* 用户信息表(用户头像放在统一文件夹下,以id为标识符) @@ -58,7 +58,7 @@ CREATE TABLE info primary key(id), foreign key(id) references user(id) ON DELETE CASCADE -); +)DEFAULT CHARSET=utf8; /* 用户单向关系表 @@ -77,7 +77,7 @@ CREATE TABLE relation foreign key(usrid) references user(id) ON DELETE CASCADE, foreign key(cid) references user(id) ON DELETE CASCADE -); +)DEFAULT CHARSET=utf8; /* 事件表 @@ -87,6 +87,10 @@ kind:事件类型(安全,生活,健康) state:事件状态(求助中,结束) content:事件求助信息(包含位置,事件内容,时间等) assist:事件辅助信息(包含图片,语音等) +latitude:经度 +longitude:纬度 +starttime 求助开始时间, +endtime 求助结束时间, */ CREATE TABLE event ( @@ -98,10 +102,12 @@ CREATE TABLE event assist blob, latitude DECIMAL, longitude DECIMAL, + starttime datetime, + endtime datetime, primary key(id), foreign key(usrid) references user(id) ON DELETE CASCADE -); +)DEFAULT CHARSET=utf8; /* 事件<>帮客关系表 @@ -121,7 +127,7 @@ CREATE TABLE helper foreign key(eid) references event(id) ON DELETE CASCADE, foreign key(usrid) references user(id) ON DELETE CASCADE -); +)DEFAULT CHARSET=utf8; /* 事件<>援助信息表 @@ -130,6 +136,7 @@ id:自增id eid:事件id usrid:帮客的用户id content:援助信息内容 +time 信息发送时间 */ CREATE TABLE support ( @@ -137,11 +144,12 @@ CREATE TABLE support eid int NOT NULL, usrid int NOT NULL, content blob NOT NULL, + time datetime, primary key(id), foreign key(eid) references event(id) ON DELETE CASCADE, foreign key(usrid) references user(id) ON DELETE CASCADE -); +)DEFAULT CHARSET=utf8; /* 第三方登录的绑定关系表 diff --git a/doc/newAPI.doc b/doc/newAPI.doc index 4424556e1b2a811ff7ff9a993297ea2bb5cab726..60f70c4ecc7a5b314e142d7df2786858942bce8c 100644 GIT binary patch delta 1271 zcmY+@ZERCj7zglkF1NMan7i$|Qnq&43vms0tUw*LY|xFabWPKgg$!+G(@bIrR)lTo z& zp7Wg7o4O#SE=oB?;w@y5{;+u&W6ki-%F4vKwmpSzoA7c{!`LBo>_!?wc?gY5 zX{++4CWaQ{bkgvt`m5sKZZH}!4w%6L9<|ALi(5R%HbMY`kcKmm@jFVFmlp0!j$e8= zed6eg9c`Yv{G8~lvz&77KWWjKm6$?yzm?>GUH9O}`I)H?FTY2j=;xGc3)4cln(nt5 zDeX_>+Xc`rXqQD$+T}5;vCt+?Zv^_yOqn+__I3#dg)EGSe8^FZwlkky9X&tTcld?K zo(AlhjpDIvK786=M&H+0V=4$=O!g4MhZT*v6w4z+xa2{{LFfpVr4SQxXzX4nQUXaF~DY_HW! zBe$%!x=x5SG>ZAl`@OtdZQg&AS9Nd1IB*W$fnm4;WAHItCtF87W-)i`>hMsi=h(pm z!KR(h?s#T9PMlI5!!*0amDycQ4;mE;9k@`yN=#*pRYT@EpYiX%e!I8y^Zd-jwUMFz zmt*^UJ1F8ip4sgaU2<+Ww9^mIS0a*JR`RNyzY@^PJ#Zu->w1A1zZ9XOUhU(JpkVY7 zI!$Pq;ws0BPOs|gyuodYDEtJ!K!ugDO0dIba8OaKM)k(0xN;xGP8*IH;*g0upU4Nk zmZiP1yOZ(zFT{k#6x-29gH0$yo1q~d- zS2jlRZEMj!kyyb;FKw`Ly=ocINUh?_(&A$GgSg z3sr~KmkH(>TL-1|gCMw}t%ps7QUxWx6%|qNgJWH%10C3{+xo!|cK;*oyqDiS_dNMO zFXwq~`i5oSfE=-;2(eB6;dnbYH&;nSVNeAk;O*JQ>9mntL_cQgpAD*%aa@R$dSmX( z%BEk!Fg*}_eTiFry?B!}O*oi*D`!*)^~KWLA~yxY{FTn(HHMdy%i?A*o5;?#r5n8; zNTTNu*s_R{3rehM>>mmixnXk-VyVR*C*FMc@gmZ6!!d!i4*P=;JGj(3YQ~@#<-@is z>UXPpvn^;NssJa!X)vI+MQ#XoRTr~SV3`j1G;V|yK>F_$s(^4YtPDjo|6wrXSCTwjn+*0`PME|>tz9E9Md zv3xcfT#jQ-qJHo`Npep!HUEa)ZkM4|pKXmrX&wJV%s^)7?ywbr@e_#>i-GnyX5>ky@>y;u(+#jKsQ+8 z3&{Q?;+TNjzkmNVJ@q7W^}=`k|L4xOnadu8yoS^lJZsaO}NC-_?vg* z8VL;R!y6qTF{LUyu8G_!h@Jzlo2ZaIiM4EWT3N4uo={bZj|2~w#1UN&#On03(PgPn z;=0J~^%AAPUa*hXbiu3Jt|DDy!t)5G$H2Q90YMS)fteSNZ(LS~Z94@<9YMR+a!KiC zN#^CA6>ecF*D+Iu2k`k7E+-n+siiX8oI5zo4SL#9r}2>`Y{jeNT?J0R&!9M z_}Bgb{~*g${fSy>Ot-B&&yzV$HF7E_i_`c=X!Ip;FT5|T+MdqQPf980nO7LUVf_ch C_A6Te From a67da635b8153b50ca785d9575f7ff18e568941e Mon Sep 17 00:00:00 2001 From: Anton Zhong Date: Mon, 14 Jul 2014 15:59:57 +0800 Subject: [PATCH 22/66] Change db.api cause timestamp add to db --- code/dbapi.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index abc40bf..0764cf3 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -288,11 +288,13 @@ def addEventByUserName(self,username,message): if(not("kind" in message and "content" in message)): return {"state":3,"errorDesc":"Messge Incomplete"} else: - sql="insert into event (usrid,kind,state,content) values (%s,%s,%s,%s)" - param=(usrid["id"],message["kind"],0,message["content"]) + cursor.execute("select now()") + currentTime=cursor.fetchone() + sql="insert into event (usrid,kind,state,content,starttime) values (%s,%s,%s,%s,%s)" + param=(usrid["id"],message["kind"],0,message["content"],currentTime['now()']) if("assist" in message): - sql="insert into event (usrid,kind,state,content,assist) values (%s,%s,%s,%s,%s)" - param=(usrid["id"],message["kind"],0,message["content"],message["assist"]) + sql="insert into event (usrid,kind,state,content,assist,starttime) values (%s,%s,%s,%s,%s,%s)" + param=(usrid["id"],message["kind"],0,message["content"],message["assist"],currentTime['now()']) cursor.execute(sql,param) self.db.commit() @@ -337,8 +339,10 @@ def addSupportByEventIdAndUserName(self,eid,username,message): return {"errorCode":403,"errorDesc":"Messge Incomplete"} else: cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="insert into support (eid,usrid,content) values (%s,%s,%s)" - param=(eid,self.getUserIdByUserName(username)["id"],message["content"]) + cursor.execute("select now()") + currentTime=cursor.fetchone() + sql="insert into support (eid,usrid,content,time) values (%s,%s,%s.%s)" + param=(eid,self.getUserIdByUserName(username)["id"],message["content"],currentTime['now()']) cursor.execute(sql,param) self.db.commit() cursor.execute("select last_insert_id()") From 6c38ee4ea4573cd2baaba67253bbd7f0c5fdf4a4 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Mon, 14 Jul 2014 17:17:05 +0800 Subject: [PATCH 23/66] add getaroundevent --- code/dbapi.py | 24 ++++++++++++++++++++++++ code/handler/CheckrelativesHandler.py | 4 ++-- code/handler/GetArroundEvent.py | 21 +++++++++++++++++++++ code/handler/HelpmessageHandler.py | 2 +- code/handler/RegisterHandler.py | 2 +- code/handler/__init__.py | 3 ++- code/main.py | 3 ++- db.sql | 16 ++++++++-------- 8 files changed, 61 insertions(+), 14 deletions(-) create mode 100644 code/handler/GetArroundEvent.py diff --git a/code/dbapi.py b/code/dbapi.py index abc40bf..2432437 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -42,6 +42,14 @@ def updateUserstate(self,uid,state): cursor.close() return + #get user all info in user+info + #pre con: user exist + #after: return a dict result include all info of user + def getUserAllinfobyName(self,name): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + uid = self.getUserByUserName(name)['id'] + return self.getUsermassegeByUserId(uid) + def CheckRelationbyId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="select * from relation where usrid=%s" @@ -184,6 +192,7 @@ def changeEventState(self,eid): self.db.commit() cursor.close() return + #cancle a user by user(id) #pre condiction: uid exist #after:delete all record of this user @@ -196,6 +205,21 @@ def cancelUser(self,uid): cursor.close() return + #get all events around user(latitude,longitude) inside distance + #pre con:user(latitude,longitude) exist,distance >=0 + #after:return a list contain event info or [] + def getEventAround(self,longitude,latitude,distance): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select * from event where 6371.004*ACOS(SIN(%s/180*PI())*SIN(latitude/180*PI())+COS(%s/180*PI())*COS(latitude/180*PI())*COS((%s-longitude)/180*PI())) < %s" + param = (latitude,latitude,longitude,distance) + cursor.execute(sql,param) + result= cursor.fetchall() + #for row in cursor.fetchall(): + # result.append(row) + #cursor.close() + return result + + '''Yeqin Zheng, 09/07/2014''' def getRelationByUsername(self, u_name, r_name): result = self.getUserByUserName(u_name) diff --git a/code/handler/CheckrelativesHandler.py b/code/handler/CheckrelativesHandler.py index 24dab61..1273561 100644 --- a/code/handler/CheckrelativesHandler.py +++ b/code/handler/CheckrelativesHandler.py @@ -17,10 +17,10 @@ def post(self): for row in re: name=self.application.dbapi.getUsermassegeByUserId(row["cid"]) print name - relatives.append(name ) + relatives.append(name) data1={'state':1,'ralatives':relatives} data=json.dumps(data1) else: data1={'state':1,'relatives':''} data=json.dumps(data1) - self.write(data) + self.write(data) \ No newline at end of file diff --git a/code/handler/GetArroundEvent.py b/code/handler/GetArroundEvent.py new file mode 100644 index 0000000..3539ca8 --- /dev/null +++ b/code/handler/GetArroundEvent.py @@ -0,0 +1,21 @@ +import tornado.ioloop +import tornado.web +import tornado.httpserver +import json + +class GetArroundEvent(tornado.web.RequestHandler): + def get(self): + self.write("

GetArroundEvent

") + + def post(self): + #content =self.request.body + content='{"username":"test1"}' + j=json.loads(content) + user = self.application.dbapi.getUserAllinfobyName(j['username']) + if(user is None): + self.write("{'state':2}") + print "username not exist" + return + result = self.application.dbapi.getEventAround(user['latitude'],user['longitude'],3) + self.write(str(result)) + return \ No newline at end of file diff --git a/code/handler/HelpmessageHandler.py b/code/handler/HelpmessageHandler.py index efd5225..11df814 100644 --- a/code/handler/HelpmessageHandler.py +++ b/code/handler/HelpmessageHandler.py @@ -9,7 +9,7 @@ def get(self): def post(self): #content =self.request.body - content='{"username":"oo","message":{"kind":1,"content":"TestContent","assist":"TestAssist"}}' + content='{"username":"test2","message":{"kind":1,"content":"TestContent","assist":"TestAssist"}}' jobj=json.loads(content) result=self.application.dbapi.addEventByUserName(jobj["username"],jobj["message"]) self.write(str(result)) diff --git a/code/handler/RegisterHandler.py b/code/handler/RegisterHandler.py index 402cf56..1677acc 100644 --- a/code/handler/RegisterHandler.py +++ b/code/handler/RegisterHandler.py @@ -10,7 +10,7 @@ def get(self): def post(self): #content = self.get_argument("content") - content = '{"username": "你好吗","password": "sda","kind": 1, "cardid":"tests2" ,"realname":"realtest2","sex":1,"age":41, "address":"iii","illness":"hijiiii"}' + content = '{"username": "test3","password": "sda","kind": 1, "cardid":"test3" ,"realname":"realtest2","sex":1,"age":41, "address":"iii","illness":"hijiiii"}' j = json.loads(content) if(self.application.dbapi.getUserByUserName(j['username']) is not None): self.write("{'state':1}") diff --git a/code/handler/__init__.py b/code/handler/__init__.py index a5d1991..cf31671 100644 --- a/code/handler/__init__.py +++ b/code/handler/__init__.py @@ -14,4 +14,5 @@ "AddaidHandler", "SendsupportHandler", "QuitaidHandler", - "EventHandler"] + "EventHandler", + "GetArroundEvent"] diff --git a/code/main.py b/code/main.py index b3deab6..5ace273 100644 --- a/code/main.py +++ b/code/main.py @@ -32,7 +32,8 @@ def __init__(self): (r"/api/addaid",AddaidHandler.AddaidHandler), (r"/api/sendsupport",SendsupportHandler.SendsupportHandler), (r"/api/quitaid",QuitaidHandler.QuitaidHandler), - (r"/api/event",EventHandler.EventHandler)] + (r"/api/event",EventHandler.EventHandler), + (r"/api/getAround",GetArroundEvent.GetArroundEvent)] tornado.web.Application.__init__(self,handlers,**settings) self.dbapi=dbapi.dbapi() diff --git a/db.sql b/db.sql index 0b03c6f..50c7512 100644 --- a/db.sql +++ b/db.sql @@ -39,8 +39,8 @@ address:地址 illness:病史 credit:用户信誉度(根据参与的所有事件评分-综合得出) score:用户积分(根据参与的所有事件-系统自动累积) -latitude:经度 -longitude:纬度 +latitude:纬度 +longitude:经度 */ CREATE TABLE info ( @@ -53,8 +53,8 @@ CREATE TABLE info illness varchar(255), credit int, score int, - latitude DECIMAL, - longitude DECIMAL, + latitude DECIMAL(12,7), + longitude DECIMAL(12,7), primary key(id), foreign key(id) references user(id) ON DELETE CASCADE @@ -87,8 +87,8 @@ kind:事件类型(安全,生活,健康) state:事件状态(求助中,结束) content:事件求助信息(包含位置,事件内容,时间等) assist:事件辅助信息(包含图片,语音等) -latitude:经度 -longitude:纬度 +latitude:纬度 +longitude:经度 starttime 求助开始时间, endtime 求助结束时间, */ @@ -100,8 +100,8 @@ CREATE TABLE event state int NOT NULL, content blob NOT NULL, assist blob, - latitude DECIMAL, - longitude DECIMAL, + latitude DECIMAL(12,7), + longitude DECIMAL(12,7), starttime datetime, endtime datetime, primary key(id), From 10cfab22cbd714457cd409c02cd066b53f9943db Mon Sep 17 00:00:00 2001 From: Anton Zhong Date: Mon, 14 Jul 2014 17:32:19 +0800 Subject: [PATCH 24/66] Add latitude and longitude to help message handler --- code/dbapi.py | 8 ++++---- code/handler/HelpmessageHandler.py | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 0764cf3..ebbde5d 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -290,11 +290,11 @@ def addEventByUserName(self,username,message): else: cursor.execute("select now()") currentTime=cursor.fetchone() - sql="insert into event (usrid,kind,state,content,starttime) values (%s,%s,%s,%s,%s)" - param=(usrid["id"],message["kind"],0,message["content"],currentTime['now()']) + sql="insert into event (usrid,kind,state,content,starttime,latitude,longitude) values (%s,%s,%s,%s,%s,%s,%s)" + param=(usrid["id"],message["kind"],0,message["content"],currentTime['now()'],message['latitude'],message['longitude']) if("assist" in message): - sql="insert into event (usrid,kind,state,content,assist,starttime) values (%s,%s,%s,%s,%s,%s)" - param=(usrid["id"],message["kind"],0,message["content"],message["assist"],currentTime['now()']) + sql="insert into event (usrid,kind,state,content,assist,starttime,latitude,longitude) values (%s,%s,%s,%s,%s,%s,%s,%s)" + param=(usrid["id"],message["kind"],0,message["content"],message["assist"],currentTime['now()'],message['latitude'],message['longitude']) cursor.execute(sql,param) self.db.commit() diff --git a/code/handler/HelpmessageHandler.py b/code/handler/HelpmessageHandler.py index efd5225..caaa639 100644 --- a/code/handler/HelpmessageHandler.py +++ b/code/handler/HelpmessageHandler.py @@ -9,7 +9,7 @@ def get(self): def post(self): #content =self.request.body - content='{"username":"oo","message":{"kind":1,"content":"TestContent","assist":"TestAssist"}}' + content='{"username":"oo","message":{"kind":1,"content":"TestContent","assist":"TestAssist",latitude:123.4,longitude:123.4}}' jobj=json.loads(content) result=self.application.dbapi.addEventByUserName(jobj["username"],jobj["message"]) self.write(str(result)) From ba8bec698a2945bade8ad0c945385214fa92557e Mon Sep 17 00:00:00 2001 From: dage <641846382@qq.com> Date: Tue, 15 Jul 2014 14:01:44 +0800 Subject: [PATCH 25/66] 2014/7/15 by linhu --- code/dbapi.py | 42 +++++++++++++++++++++++++++ code/handler/CheckrelativesHandler.py | 6 ++-- code/index.html | 6 +++- 3 files changed, 51 insertions(+), 3 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 414e5c4..eb98902 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -258,6 +258,48 @@ def addEventByUserName(self,username,message): cursor.close() #07/09 + def searchUserbySexAgeKind(self,content): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + if(content['sex']): + if(content['age']): + if(content['kind']): + sql="select user.id from user,info where info.sex=%s and info.age=%s and user.kind=%s" + param=(content['sex'],content['age'],content['kind']) + else: + sql="select user.id from user,info where info.sex=%s and info.age=%s" + param=(content['sex'],content['age']) + else: + if(content['kind']): + sql="select user.id from user,info where info.sex=%s and user.kind=%s" + param=(content['sex'],content['kind']) + else: + sql="select user.id from user,info where info.sex=%s" + param=(content['sex']) + else: + if(content['age']): + if(content['kind']): + sql="select user.id from user,info where ianfo.age=%s and user.kind=%s" + param=(content['age'],content['kind']) + else: + sql="select user.id from user,info where info.age=%s" + param=(content['age']) + else: + if(content['kind']): + sql="select user.id from user,info where user.kind=%s" + content(['kind']) + else: + data=[{'state':0}] + result=json.dumps(data) + return result + cursor.execute(sql,param) + result1=cursor.fetchall() + userlist=[] + for x in result1: + userlist.append(self.getUserByUserId(x['id'])) + data=[{'state':1},userlist] + result=json.dumps(data) + return result + #Anton Zhong def getHelperByEventIdAndUserName(self,eid,username): diff --git a/code/handler/CheckrelativesHandler.py b/code/handler/CheckrelativesHandler.py index b464c77..07c635a 100644 --- a/code/handler/CheckrelativesHandler.py +++ b/code/handler/CheckrelativesHandler.py @@ -4,8 +4,10 @@ import os class CheckrelativesHandler(tornado.web.RequestHandler): def post(self): - username=self.get_argument("content") - userid=self.application.dbapi.getUserByUserName(username)["id"] + #username=self.get_argument("content") + content = '{"username": "ooo"}' + j = json.loads(content) + userid=self.application.dbapi.getUserByUserName(j['username'])["id"] re=self.application.dbapi.CheckRelationbyId(userid) if re!=(): relatives=[] diff --git a/code/index.html b/code/index.html index 1ffad9b..0a6c519 100644 --- a/code/index.html +++ b/code/index.html @@ -6,9 +6,13 @@
- + + + + + From edc543a6880d1eee1392d3d9310cc2fbf2388294 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Tue, 15 Jul 2014 15:02:39 +0800 Subject: [PATCH 26/66] finish get around events,get around user --- code/dbapi.py | 38 ++++++++++++++++++++++++++------- code/handler/GetArroundEvent.py | 6 +++--- code/handler/UpdateCid.py | 23 ++++++++++++++++++++ code/handler/__init__.py | 1 + code/main.py | 1 + 5 files changed, 58 insertions(+), 11 deletions(-) create mode 100644 code/handler/UpdateCid.py diff --git a/code/dbapi.py b/code/dbapi.py index 2432437..1433aae 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -147,7 +147,6 @@ def getRelationByUserId(self, u_id, r_id): return row #update user cid by uid - #untest def UpdateCidByuid(self,cid,uid): cursor = self.db.cursor() sql = "update user set cid = %s where id = %s" @@ -208,17 +207,40 @@ def cancelUser(self,uid): #get all events around user(latitude,longitude) inside distance #pre con:user(latitude,longitude) exist,distance >=0 #after:return a list contain event info or [] - def getEventAround(self,longitude,latitude,distance): + def getEventAround(self,lon,lat,distance): cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql = "select * from event where 6371.004*ACOS(SIN(%s/180*PI())*SIN(latitude/180*PI())+COS(%s/180*PI())*COS(latitude/180*PI())*COS((%s-longitude)/180*PI())) < %s" - param = (latitude,latitude,longitude,distance) + #sql = "select round(6378.138*2*asin(sqrt(pow(sin( (event.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(event.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (event.longitude*pi()/180-(%s)*pi()/180)/2),2)))) from event" + #param = (lat,lat,lon) + sql = """select event.id,user.name,event.kind,event.content,event.assist,event.starttime from event,user where + exists(select id from event where event.latitude <= (%s+1) and event.latitude >= (%s-1) and longitude <= (%s+1) and longitude>=(%s-1)) + and event.usrid = user.id + and event.state = 0 + and round(6378.138*2*asin(sqrt(pow(sin( (event.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(event.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (event.longitude*pi()/180-(%s)*pi()/180)/2),2)))) < %s """ + param = (lat,lat,lon,lon,lat,lat,lon,distance) cursor.execute(sql,param) - result= cursor.fetchall() - #for row in cursor.fetchall(): - # result.append(row) - #cursor.close() + result = [] + for row in cursor.fetchall(): + result.append(row) + cursor.close() return result + #get all user(cid) around latitude,longitude inside distance(use for push) + #pre condiction:lon,lat exist,distance>=0 + #after :return a list coantain user.cid or [] + def getUserCidAround(self,lon,lat,distance): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = """select user.cid from user,info where + exists(select id from info where latitude <= (%s+1) and latitude >= (%s-1) and longitude <= (%s+1) and longitude>=(%s-1)) + and user.state = 1 + and user.id = info.id + and round(6378.138*2*asin(sqrt(pow(sin( (info.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(info.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (info.longitude*pi()/180-(%s)*pi()/180)/2),2)))) < %s""" + param = (lat,lat,lon,lon,lat,lat,lon,distance) + cursor.execute(sql,param) + result = [] + for row in cursor.fetchall(): + result.append(row) + cursor.close() + return result '''Yeqin Zheng, 09/07/2014''' def getRelationByUsername(self, u_name, r_name): diff --git a/code/handler/GetArroundEvent.py b/code/handler/GetArroundEvent.py index 3539ca8..5f0212c 100644 --- a/code/handler/GetArroundEvent.py +++ b/code/handler/GetArroundEvent.py @@ -16,6 +16,6 @@ def post(self): self.write("{'state':2}") print "username not exist" return - result = self.application.dbapi.getEventAround(user['latitude'],user['longitude'],3) - self.write(str(result)) - return \ No newline at end of file + result = self.application.dbapi.getUserAround(user['longitude'],user['latitude'],150) + self.write("{'state':1,aids:"+str(result)+"}") + return diff --git a/code/handler/UpdateCid.py b/code/handler/UpdateCid.py new file mode 100644 index 0000000..66a630e --- /dev/null +++ b/code/handler/UpdateCid.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +import tornado.ioloop +import tornado.web +import tornado.httpserver +import json + +class UpdateCid(tornado.web.RequestHandler): + def get(self): + self.write("

UpdateCid

") + + def post(self): + #content =self.request.body + content = '{"username":"test1","cid":"dasdada"}' + j = json.loads(content) + user = self.application.dbapi.getUserByUserName(j['username']) + if(user is None): + self.write("{'state':2}") + print "username not exist" + return + self.application.dbapi.UpdateCidByuid(j['cid'],user['id']) + self.write("{'state':1}") + print("Login success") + return \ No newline at end of file diff --git a/code/handler/__init__.py b/code/handler/__init__.py index cf31671..a9c7a1c 100644 --- a/code/handler/__init__.py +++ b/code/handler/__init__.py @@ -15,4 +15,5 @@ "SendsupportHandler", "QuitaidHandler", "EventHandler", + "UpdateCid", "GetArroundEvent"] diff --git a/code/main.py b/code/main.py index 5ace273..8853425 100644 --- a/code/main.py +++ b/code/main.py @@ -33,6 +33,7 @@ def __init__(self): (r"/api/sendsupport",SendsupportHandler.SendsupportHandler), (r"/api/quitaid",QuitaidHandler.QuitaidHandler), (r"/api/event",EventHandler.EventHandler), + (r"/api/updatecid",UpdateCid.UpdateCid), (r"/api/getAround",GetArroundEvent.GetArroundEvent)] tornado.web.Application.__init__(self,handlers,**settings) self.dbapi=dbapi.dbapi() From aa47e2fc288993f7123cb8abc4fc6ca32d37c5b3 Mon Sep 17 00:00:00 2001 From: dage <641846382@qq.com> Date: Tue, 15 Jul 2014 15:10:17 +0800 Subject: [PATCH 27/66] 2014/7/15 by linhu2.0 --- code/dbapi.py | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index eb98902..005e514 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -258,6 +258,8 @@ def addEventByUserName(self,username,message): cursor.close() #07/09 + #seach user by sex,age,kind and return the row of table user + # it has 8 options def searchUserbySexAgeKind(self,content): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) if(content['sex']): @@ -274,29 +276,32 @@ def searchUserbySexAgeKind(self,content): param=(content['sex'],content['kind']) else: sql="select user.id from user,info where info.sex=%s" - param=(content['sex']) + param=(content['sex'],) else: if(content['age']): if(content['kind']): - sql="select user.id from user,info where ianfo.age=%s and user.kind=%s" + sql="select user.id from user,info where info.age=%s and user.kind=%s" param=(content['age'],content['kind']) else: sql="select user.id from user,info where info.age=%s" - param=(content['age']) + param=(content['age'],) else: if(content['kind']): sql="select user.id from user,info where user.kind=%s" - content(['kind']) + param=(content['kind'],) else: - data=[{'state':0}] + data=[{'state':0}]#input is null return state 0 result=json.dumps(data) return result cursor.execute(sql,param) result1=cursor.fetchall() - userlist=[] - for x in result1: - userlist.append(self.getUserByUserId(x['id'])) - data=[{'state':1},userlist] + if(result1): + userlist=[] + for x in result1: + userlist.append(self.getUserByUserId(x['id'])) + data=[{'state':1},userlist]#return the user table successly + else: + data=[{'state':2}]#the user not exist,return state 2 result=json.dumps(data) return result From 9a34bbcd9b73bfa4c8e894c06c43bf0a21b21234 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Tue, 15 Jul 2014 15:22:28 +0800 Subject: [PATCH 28/66] merge --- code/dbapi.py | 42 +++++++++++++++++++++++++++ code/handler/CheckrelativesHandler.py | 2 +- 2 files changed, 43 insertions(+), 1 deletion(-) diff --git a/code/dbapi.py b/code/dbapi.py index 1433aae..45b0830 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -348,6 +348,48 @@ def addEventByUserName(self,username,message): cursor.close() #07/09 + def searchUserbySexAgeKind(self,content): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + if(content['sex']): + if(content['age']): + if(content['kind']): + sql="select user.id from user,info where info.sex=%s and info.age=%s and user.kind=%s" + param=(content['sex'],content['age'],content['kind']) + else: + sql="select user.id from user,info where info.sex=%s and info.age=%s" + param=(content['sex'],content['age']) + else: + if(content['kind']): + sql="select user.id from user,info where info.sex=%s and user.kind=%s" + param=(content['sex'],content['kind']) + else: + sql="select user.id from user,info where info.sex=%s" + param=(content['sex']) + else: + if(content['age']): + if(content['kind']): + sql="select user.id from user,info where ianfo.age=%s and user.kind=%s" + param=(content['age'],content['kind']) + else: + sql="select user.id from user,info where info.age=%s" + param=(content['age']) + else: + if(content['kind']): + sql="select user.id from user,info where user.kind=%s" + content(['kind']) + else: + data=[{'state':0}] + result=json.dumps(data) + return result + cursor.execute(sql,param) + result1=cursor.fetchall() + userlist=[] + for x in result1: + userlist.append(self.getUserByUserId(x['id'])) + data=[{'state':1},userlist] + result=json.dumps(data) + return result + #Anton Zhong def getHelperByEventIdAndUserName(self,eid,username): diff --git a/code/handler/CheckrelativesHandler.py b/code/handler/CheckrelativesHandler.py index 1273561..fcc667d 100644 --- a/code/handler/CheckrelativesHandler.py +++ b/code/handler/CheckrelativesHandler.py @@ -23,4 +23,4 @@ def post(self): else: data1={'state':1,'relatives':''} data=json.dumps(data1) - self.write(data) \ No newline at end of file + self.write(data) From 9d948934de7ca8d920e13ceec101c82f6fa02ff5 Mon Sep 17 00:00:00 2001 From: Anton Zhong Date: Tue, 15 Jul 2014 16:44:52 +0800 Subject: [PATCH 29/66] Fix give credit and get user info --- code/dbapi.py | 4 ++-- code/handler/GivecreditHandler.py | 11 ++++++++--- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 6464ab9..6dacf04 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -61,7 +61,7 @@ def CheckRelationbyId(self,userid): def getUsermassegeByUserId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="select * from user ,info where user.id=%s and info.id=%s" + sql="select user.name,info.name,info.sex,info.age,info.address,info.illness,info.credit,info.score from user ,info where user.id=%s and info.id=%s" param=(userid,userid) cursor.execute(sql,param) result=cursor.fetchone() @@ -381,7 +381,7 @@ def searchUserbySexAgeKind(self,content): content(['kind']) else: data=[{'state':0}] - result=json.dumps(data) + result=json.dumps(data) return result cursor.execute(sql,param) result1=cursor.fetchall() diff --git a/code/handler/GivecreditHandler.py b/code/handler/GivecreditHandler.py index b60b227..464fb8d 100644 --- a/code/handler/GivecreditHandler.py +++ b/code/handler/GivecreditHandler.py @@ -7,7 +7,12 @@ class GivecreditHandler(tornado.web.RequestHandler): def get(self): self.write("

GivecreditHandler

") def post(self): - content='{"eventid":4,"helpername":"test2","credit":3}' + #content='{"eventid":4,"helpername":"test2","credit":3}' + content='{"eventid":1,"credits":[{"username":"test1","cridit:1},{"username":"test2","cridit":1}]}' jobj=json.loads(content) - result=self.application.dbapi.setCreditByEventIdAndUserName(jobj["eventid"],jobj["helpername"],jobj["credit"]) - self.write(str(result)+str(self.application.dbapi.getHelperByEventIdAndUserName(jobj["eventid"],jobj["helpername"]))) \ No newline at end of file + result=[] + for issue in content['credits']: + temp=self.application.dbapi.setCreditByEventIdAndUserName(content["eventid"],issue["username"],issue["credit"]) + result.append({"helpername":issue["username"],"result":temp}); + self.write(str(result)) + \ No newline at end of file From 357896a540d51a280076f7d1a31be57971e26b8c Mon Sep 17 00:00:00 2001 From: Anton Zhong Date: Wed, 16 Jul 2014 08:44:00 +0800 Subject: [PATCH 30/66] Fix synatx error. --- code/handler/HelpmessageHandler.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/code/handler/HelpmessageHandler.py b/code/handler/HelpmessageHandler.py index caaa639..5bd64c3 100644 --- a/code/handler/HelpmessageHandler.py +++ b/code/handler/HelpmessageHandler.py @@ -9,7 +9,7 @@ def get(self): def post(self): #content =self.request.body - content='{"username":"oo","message":{"kind":1,"content":"TestContent","assist":"TestAssist",latitude:123.4,longitude:123.4}}' + content='{"username":"oo","message":{"kind":1,"content":"TestContent","assist":"TestAssist","latitude":123.4,"longitude":123.4}}' jobj=json.loads(content) result=self.application.dbapi.addEventByUserName(jobj["username"],jobj["message"]) self.write(str(result)) From 60dd7a6e928da3c3823a49da17788cdcb07396fd Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 16 Jul 2014 10:27:37 +0800 Subject: [PATCH 31/66] add init data in db --- db.sql | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 64 insertions(+), 5 deletions(-) diff --git a/db.sql b/db.sql index 50c7512..16507d7 100644 --- a/db.sql +++ b/db.sql @@ -33,7 +33,7 @@ id:对应用户id cardid:身份证号 phone:电话 name:用户昵称 -sex:性别 +sex:性别 (男1,女2) age:年龄 address:地址 illness:病史 @@ -65,7 +65,7 @@ CREATE TABLE info id:自增id usrid:用户id oid:对应用户id -kind:关系类型(关注好友,亲友等等) +kind:关系类型(关注好友2,亲友1等等) */ CREATE TABLE relation ( @@ -83,9 +83,9 @@ CREATE TABLE relation 事件表 id:自增id usrid:求助者id -kind:事件类型(安全,生活,健康) -state:事件状态(求助中,结束) -content:事件求助信息(包含位置,事件内容,时间等) +kind:事件类型(安全1,生活2,健康3) +state:事件状态(求助中0,结束1) +content:事件求助信息(事件内容等) assist:事件辅助信息(包含图片,语音等) latitude:纬度 longitude:经度 @@ -162,3 +162,62 @@ CREATE TABLE tpu foreign key(usrid) references user(id) ON DELETE CASCADE )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; +/* +添加6用户(3男3女): +*/ +insert into user(name,kind,password,state) values("test1",1,"passwordtest1",1); +insert into user(name,kind,password,state) values("test2",2,"密码test2",1); +insert into user(name,kind,password,state) values("test3",3,"passwordtest3",1); +insert into user(name,kind,password,state) values("测试test4",1,"passwordtest4",0); +insert into user(name,kind,password,state) values("test5",2,"passwordtest5",1); +insert into user(name,kind,password,state) values("test6",3,"passwordtest6",0); + +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(1,"test1cardid","realtest1",1,21,"广州耶1","你才有病",0,0,23.000000,23.000000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(2,"test2cardid","realtest2",1,25,"广州耶2","我有病",0,0,23.001000,23.000000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(3,"测试test3cardid","realtest3",1,46,"广州耶3","你才有病",0,0,23.000000,23.001000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(4,"test4cardid","测试realtest4",2,21,"广州耶4","我有病",0,0,23.00000,24.000000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(5,"test5cardid","realtest5",2,15,"广州耶5","你才有病",0,0,24.000000,23.000000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(6,"test6cardid","realtest6",2,65,"广州耶6","我有病",0,0,25.000000,25.000000); +/* +绑定关系1->2,1->4,2->6,2->5: +*/ +insert into relation(usrid,cid,kind) values(1,2,1); +insert into relation(usrid,cid,kind) values(1,4,2); +insert into relation(usrid,cid,kind) values(2,6,1); +insert into relation(usrid,cid,kind) values(2,5,2); +/* +添加3事件: +事件1:1发起 安全1 +事件1:3发起 生活2 +事件1:6发起 健康3 +*/ +insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(1,1,0,"安全事件啦",23.001000,23.001000,"2014-07-14 16:55:54"); +insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(3,2,0,"生活事件啦",25.001000,23.001000,"2014-07-15 08:45:54"); +insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(6,3,0,"健康事件啦",23.001020,23.001030,"2014-07-15 08:00:54"); + +/* +添加helper +1,2,4,6 +2,1,5 +3,2,3,5 +*/ +insert into helper(eid,usrid) values(1,2); +insert into helper(eid,usrid) values(1,4); +insert into helper(eid,usrid) values(1,6); +insert into helper(eid,usrid) values(2,1); +insert into helper(eid,usrid) values(3,5); +insert into helper(eid,usrid) values(3,2); +insert into helper(eid,usrid) values(3,3); +insert into helper(eid,usrid) values(3,5); + +/*添加辅助信息 +1:2发,6发 +2:5发 +3:3发,5发*/ +insert into support(eid,usrid,content,time) values(1,2,"2援助事件1","2014-07-14 17:00:54"); +insert into support(eid,usrid,content,time) values(1,2,"6援助事件1","2014-07-14 17:12:54"); + +insert into support(eid,usrid,content,time) values(2,5,"5援助事件2","2014-07-15 09:10:54"); + +insert into support(eid,usrid,content,time) values(3,3,"3援助事件3","2014-07-15 08:10:54"); +insert into support(eid,usrid,content,time) values(3,5,"5援助事件4","2014-07-15 08:10:54"); \ No newline at end of file From 07979c585ec4dc1022bc7aa910adb040a24bae36 Mon Sep 17 00:00:00 2001 From: dage <641846382@qq.com> Date: Wed, 16 Jul 2014 10:51:23 +0800 Subject: [PATCH 32/66] 2014/7/16 by linhu --- code/dbapi.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/code/dbapi.py b/code/dbapi.py index 005e514..0cefe2b 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -305,6 +305,23 @@ def searchUserbySexAgeKind(self,content): result=json.dumps(data) return result + #update the password by userid and userpassword + def UpdatePassword(self,content): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + if(content['passwd']): + sql="update user set passwd=%s where id=%s" + param=(content['passwd'],content['id']) + cursor.execute(sql,param) + self.db.commit() + data=[{'state':1}]#update success return state 1 + result=json.dumps(data) + return result + else: + data=[{'state':0}]#input is null return state 0 + result=json.dumps(data) + return result + cursor.close() + #Anton Zhong def getHelperByEventIdAndUserName(self,eid,username): From fd4c2a65ea992f07ecfa85d0d31f90c18ff29f11 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 16 Jul 2014 11:34:36 +0800 Subject: [PATCH 33/66] little change --- code/dbapi.py | 4 ++-- code/handler/AddaidHandler.py | 2 +- code/handler/CheckrelativesHandler.py | 8 +++----- code/handler/HelpmessageHandler.py | 2 +- 4 files changed, 7 insertions(+), 9 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 6464ab9..e984212 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -208,7 +208,7 @@ def cancelUser(self,uid): #pre con:user(latitude,longitude) exist,distance >=0 #after:return a list contain event info or [] def getEventAround(self,lon,lat,distance): - cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + cursor = self.db. cursor(cursorclass=MySQLdb.cursors.DictCursor) #sql = "select round(6378.138*2*asin(sqrt(pow(sin( (event.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(event.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (event.longitude*pi()/180-(%s)*pi()/180)/2),2)))) from event" #param = (lat,lat,lon) sql = """select event.id,user.name,event.kind,event.content,event.assist,event.starttime from event,user where @@ -381,7 +381,7 @@ def searchUserbySexAgeKind(self,content): content(['kind']) else: data=[{'state':0}] - result=json.dumps(data) + result=json.dumps(data) return result cursor.execute(sql,param) result1=cursor.fetchall() diff --git a/code/handler/AddaidHandler.py b/code/handler/AddaidHandler.py index 1a95c95..26645b5 100644 --- a/code/handler/AddaidHandler.py +++ b/code/handler/AddaidHandler.py @@ -11,7 +11,7 @@ def get(self): self.write("

AddaidHandler

") def post(self): #content =self.request.body - content = '{"username":"oo11o","eventid":"4"}' + content = '{"username":"test1","eventid":"4"}' j = json.loads(content) result = self.application.dbapi.addaidhelper(j['username'], j['eventid']) diff --git a/code/handler/CheckrelativesHandler.py b/code/handler/CheckrelativesHandler.py index fcc667d..6da0d55 100644 --- a/code/handler/CheckrelativesHandler.py +++ b/code/handler/CheckrelativesHandler.py @@ -8,7 +8,7 @@ def get(self): def post(self): #content =self.request.body - content = '{"username":"ooo"}' + content = '{"username":"test1"}' j = json.loads(content) userid=self.application.dbapi.getUserByUserName(j['username'])["id"] re=self.application.dbapi.CheckRelationbyId(userid) @@ -18,9 +18,7 @@ def post(self): name=self.application.dbapi.getUsermassegeByUserId(row["cid"]) print name relatives.append(name) - data1={'state':1,'ralatives':relatives} - data=json.dumps(data1) + data={'state':1,'ralatives':str(relatives)} else: - data1={'state':1,'relatives':''} - data=json.dumps(data1) + data={'state':1,'relatives':'[]'} self.write(data) diff --git a/code/handler/HelpmessageHandler.py b/code/handler/HelpmessageHandler.py index caaa639..acf82fb 100644 --- a/code/handler/HelpmessageHandler.py +++ b/code/handler/HelpmessageHandler.py @@ -9,7 +9,7 @@ def get(self): def post(self): #content =self.request.body - content='{"username":"oo","message":{"kind":1,"content":"TestContent","assist":"TestAssist",latitude:123.4,longitude:123.4}}' + content='{"username":"test1","message":{"kind":1,"content":"TestContent","assist":"TestAssist","latitude":123.4,"longitude":123.4}}' jobj=json.loads(content) result=self.application.dbapi.addEventByUserName(jobj["username"],jobj["message"]) self.write(str(result)) From 52c093b164b4cc431a848607c4286dc329c2410e Mon Sep 17 00:00:00 2001 From: dage <641846382@qq.com> Date: Wed, 16 Jul 2014 12:07:30 +0800 Subject: [PATCH 34/66] index --- code/dbapi.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 0cefe2b..3aff095 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -152,8 +152,8 @@ def supportmessageinsert(self,content): cursor.close() return - #get all relativeName by user.id - #return a list contain all relations(including uid) + #get all relativeName by user.id + #return a list contain all relations(including uid) def getAllRelativeNamebyUid(self,uid): cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql = "select * from relation where usrid = %s" @@ -291,7 +291,7 @@ def searchUserbySexAgeKind(self,content): param=(content['kind'],) else: data=[{'state':0}]#input is null return state 0 - result=json.dumps(data) + result=json.dumps(data) return result cursor.execute(sql,param) result1=cursor.fetchall() @@ -314,11 +314,12 @@ def UpdatePassword(self,content): cursor.execute(sql,param) self.db.commit() data=[{'state':1}]#update success return state 1 - result=json.dumps(data) + result=json.dumps(data) return result + else: data=[{'state':0}]#input is null return state 0 - result=json.dumps(data) + result=json.dumps(data) return result cursor.close() From f3dde073d912447ea88d159b65cbd6f47ea0418e Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 16 Jul 2014 12:33:53 +0800 Subject: [PATCH 35/66] delect index.html --- code/index.html | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100644 code/index.html diff --git a/code/index.html b/code/index.html deleted file mode 100644 index 0a6c519..0000000 --- a/code/index.html +++ /dev/null @@ -1,21 +0,0 @@ - - - - Test - - -
- - - - - - - - - - - -
- - \ No newline at end of file From 7e60eb6b0b5a82cd7011f8d7b7673cd548f97292 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 16 Jul 2014 17:29:33 +0800 Subject: [PATCH 36/66] updateUserinfo & credit score --- code/dbapi.py | 112 ++++++++++++++++++++++++-- code/handler/FinishHandler.py | 2 +- code/handler/GivecreditHandler.py | 6 +- code/handler/HelpmessageHandler.py | 8 +- code/handler/UpdateUserInfoHandler.py | 23 ++++++ code/handler/__init__.py | 1 + code/main.py | 1 + 7 files changed, 143 insertions(+), 10 deletions(-) create mode 100644 code/handler/UpdateUserInfoHandler.py diff --git a/code/dbapi.py b/code/dbapi.py index 6fe1be7..4e760e4 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -42,7 +42,7 @@ def updateUserstate(self,uid,state): cursor.close() return - #get user all info in user+info + #get user userfull info in user+info #pre con: user exist #after: return a dict result include all info of user def getUserAllinfobyName(self,name): @@ -50,6 +50,18 @@ def getUserAllinfobyName(self,name): uid = self.getUserByUserName(name)['id'] return self.getUsermassegeByUserId(uid) + #get user all info in user+info + #pre con: user exist + #after: return a dict result include all info of user + def getUserInfobyName(self,name): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select * from user,info where user.name = %s and user.id = info.id" + param = (name,) + cursor.execute(sql,param) + result=cursor.fetchone() + cursor.close() + return result + def CheckRelationbyId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="select * from relation where usrid=%s" @@ -61,7 +73,7 @@ def CheckRelationbyId(self,userid): def getUsermassegeByUserId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="select user.name,info.name,info.sex,info.age,info.address,info.illness,info.credit,info.score from user ,info where user.id=%s and info.id=%s" + sql="select user.name,info.name as realname,info.sex,info.age,info.address,info.illness,info.credit,info.score from user ,info where user.id=%s and info.id=%s" param=(userid,userid) cursor.execute(sql,param) result=cursor.fetchone() @@ -184,9 +196,11 @@ def getAllRelativeNamebyUid(self,uid): # change a event sate to 1 #in order to end a event def changeEventState(self,eid): - cursor = self.db.cursor() - sql ="update event set state= %s where id = %s" - param = (1,eid) + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + cursor.execute("select now()") + currentTime=cursor.fetchone() + sql ="update event set state= %s ,endtime = %s where id = %s" + param = (1,currentTime['now()'],eid) cursor.execute(sql,param) self.db.commit() cursor.close() @@ -242,6 +256,93 @@ def getUserCidAround(self,lon,lat,distance): cursor.close() return result + #updateuser credit score in info,use for givecredit + #pre cond:eid,uid exist,score >=0 + #after: update data credit,score in info + def updateUserCreditScore(self,eid,uid,score): + cursor = self.db.cursor() + sql = "update info set score = (score + %s)/2,credit = (credit+5)/3 where id = %s" + param = (score,uid) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + cursor.close() + return + + #update user info by username,sex,age,phone,address,illness + #pre cond:uid exist + #after: update user info for what it pass + def updateUserinfo(self,uid,message): + cursor = self.db.cursor() + result = [] + if("username" in message): + user = self.getUserByUserName(message['username']) + if(user is not None): + return {"state":3,"desc":"username exist"} + sql = "update user set name = %s where id = %s" + param = (message["username"],uid) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + return {"state":2,"desc":"db access error username"} + result.append(str({"state":1,"desc":"update username success"})) + if("sex" in message): + sql = "update info set sex = %s where id = %s" + param = (message["sex"],uid) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + return {"state":2,"desc":"db access error sex"} + result.append(str({"state":1,"desc":"update sex success"})) + if("age" in message): + sql = "update info set age = %s where id = %s" + param = (message["age"],uid) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + return {"state":2,"desc":"db access error age"} + result.append(str({"state":1,"desc":"update age success"})) + """if("phone" in message): + sql = "update info set phone = %s where id = %s" + param = (message["phone"],uid) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + return {"state":2,"desc":"db access error age"} + result.append(str({"state":1,"desc":"update age success"}))""" + if("address" in message): + sql = "update info set address = %s where id = %s" + param = (message["address"],uid) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + return {"state":2,"desc":"db access error address"} + result.append(str({"state":1,"desc":"update address success"})) + if("illness" in message): + sql = "update info set illness = %s where id = %s" + param = (message["illness"],uid) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + return {"state":2,"desc":"db access error illness"} + result.append(str({"state":1,"desc":"update illness success"})) + cursor.close() + return result + '''Yeqin Zheng, 09/07/2014''' def getRelationByUsername(self, u_name, r_name): result = self.getUserByUserName(u_name) @@ -472,6 +573,7 @@ def setCreditByEventIdAndUserName(self,eid,username,credit): cursor.execute(sql,param) self.db.commit() cursor.close() + self.updateUserCreditScore(eid,usrid["id"],credit) return {"errorCode":200,"errorDesc":""} #07/10 diff --git a/code/handler/FinishHandler.py b/code/handler/FinishHandler.py index 0973ac2..5f6756c 100644 --- a/code/handler/FinishHandler.py +++ b/code/handler/FinishHandler.py @@ -9,7 +9,7 @@ def get(self): def post(self): #content =self.request.body - content = '{"username":"oo121o","eventid":2}' + content = '{"username":"test1","eventid":1}' j = json.loads(content) uid = self.application.dbapi.getUserByUserName(j['username'])["id"] event = self.application.dbapi.getEventByEventId(j['eventid']) diff --git a/code/handler/GivecreditHandler.py b/code/handler/GivecreditHandler.py index 464fb8d..67799e6 100644 --- a/code/handler/GivecreditHandler.py +++ b/code/handler/GivecreditHandler.py @@ -8,11 +8,11 @@ def get(self): self.write("

GivecreditHandler

") def post(self): #content='{"eventid":4,"helpername":"test2","credit":3}' - content='{"eventid":1,"credits":[{"username":"test1","cridit:1},{"username":"test2","cridit":1}]}' + content='{"eventid":1,"credits":[{"username":"test2","cridit":5},{"username":"test6","cridit":1}]}' jobj=json.loads(content) result=[] - for issue in content['credits']: - temp=self.application.dbapi.setCreditByEventIdAndUserName(content["eventid"],issue["username"],issue["credit"]) + for issue in jobj["credits"]: + temp=self.application.dbapi.setCreditByEventIdAndUserName(jobj["eventid"],issue["username"],issue["cridit"]) result.append({"helpername":issue["username"],"result":temp}); self.write(str(result)) \ No newline at end of file diff --git a/code/handler/HelpmessageHandler.py b/code/handler/HelpmessageHandler.py index acf82fb..7cba0f0 100644 --- a/code/handler/HelpmessageHandler.py +++ b/code/handler/HelpmessageHandler.py @@ -9,8 +9,14 @@ def get(self): def post(self): #content =self.request.body - content='{"username":"test1","message":{"kind":1,"content":"TestContent","assist":"TestAssist","latitude":123.4,"longitude":123.4}}' + content='{"username":"test1","message":{"kind":1,"content":"TestContent","assist":"TestAssist","latitude":23.000000,"longitude":23.000000}}' jobj=json.loads(content) result=self.application.dbapi.addEventByUserName(jobj["username"],jobj["message"]) + #add push message,make all distance 5km + if(result["state"] == 1): + info = self.application.dbapi.getUserInfobyName(jobj["username"]) + cidlist = self.application.dbapi.getUserCidAround(info["longitude"],info["latitude"],5) + #push(cidlist) + self.write(str(result)) return \ No newline at end of file diff --git a/code/handler/UpdateUserInfoHandler.py b/code/handler/UpdateUserInfoHandler.py new file mode 100644 index 0000000..625df04 --- /dev/null +++ b/code/handler/UpdateUserInfoHandler.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +import tornado.ioloop +import tornado.web +import tornado.httpserver +import json + +class UpdateUserInfoHandler(tornado.web.RequestHandler): + def get(self): + self.write("

UpdateUserInfoHandler

") + + def post(self): + #content =self.request.body + content = '{"username":"dasda1","changemessage":{"age":15,"illness":"我是小啊小苹果"}}' + j = json.loads(content) + user = self.application.dbapi.getUserByUserName(j['username']) + if(user is None): + self.write("{'state':1}") + print "username not exist" + return + result = self.application.dbapi.updateUserinfo(user['id'],j['changemessage']) + self.write("{'result':"+ str(result)+"}") + print("UpdateUserInfo success") + return \ No newline at end of file diff --git a/code/handler/__init__.py b/code/handler/__init__.py index a9c7a1c..0d5ca95 100644 --- a/code/handler/__init__.py +++ b/code/handler/__init__.py @@ -16,4 +16,5 @@ "QuitaidHandler", "EventHandler", "UpdateCid", + "UpdateUserInfoHandler", "GetArroundEvent"] diff --git a/code/main.py b/code/main.py index 8853425..161cb52 100644 --- a/code/main.py +++ b/code/main.py @@ -34,6 +34,7 @@ def __init__(self): (r"/api/quitaid",QuitaidHandler.QuitaidHandler), (r"/api/event",EventHandler.EventHandler), (r"/api/updatecid",UpdateCid.UpdateCid), + (r"/api/updateuserinfo",UpdateUserInfoHandler.UpdateUserInfoHandler), (r"/api/getAround",GetArroundEvent.GetArroundEvent)] tornado.web.Application.__init__(self,handlers,**settings) self.dbapi=dbapi.dbapi() From 7a45b9fe9b715a42e880dfde1e26d500fc3173d5 Mon Sep 17 00:00:00 2001 From: Anton Zhong Date: Wed, 16 Jul 2014 17:39:28 +0800 Subject: [PATCH 37/66] Add avatar function --- code/handler/RegisterHandler.py | 14 +++++++++++--- code/main.py | 3 ++- code/static/avatar/test.png | Bin 0 -> 143877 bytes code/util.py | 19 +++++++++++++++++++ 4 files changed, 32 insertions(+), 4 deletions(-) create mode 100644 code/static/avatar/test.png create mode 100644 code/util.py diff --git a/code/handler/RegisterHandler.py b/code/handler/RegisterHandler.py index 1677acc..5d405a3 100644 --- a/code/handler/RegisterHandler.py +++ b/code/handler/RegisterHandler.py @@ -2,15 +2,15 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import json +import json,base64,os class RegisterHandler(tornado.web.RequestHandler): def get(self): - self.write("

RegisterHandler

") + self.write("

RegisterHandler

") def post(self): #content = self.get_argument("content") - content = '{"username": "test3","password": "sda","kind": 1, "cardid":"test3" ,"realname":"realtest2","sex":1,"age":41, "address":"iii","illness":"hijiiii"}' + content = '{"username": "8","password": "1","kind": 1, "cardid":"8" ,"realname":"1","sex":1,"age":1, "address":"1","illness":"1","file":"1"}' j = json.loads(content) if(self.application.dbapi.getUserByUserName(j['username']) is not None): self.write("{'state':1}") @@ -21,7 +21,15 @@ def post(self): print "cardid exist" return self.application.dbapi.register(j) + + #test + avatar=open(os.path.abspath('./static/avatar/test.png'),"rb"); + filestring=base64.standard_b64encode(avatar.read()) + self.util.setAvatar(j['username'],filestring,self.application.dbapi) + u = self.application.dbapi.getUserByUserName(j['username']); self.write("{'state':3}") print("Register") return + + \ No newline at end of file diff --git a/code/main.py b/code/main.py index 8853425..5db6f0c 100644 --- a/code/main.py +++ b/code/main.py @@ -1,7 +1,7 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,MySQLdb,dbapi +import os,MySQLdb,dbapi,util from handler import * #login url handler @@ -37,6 +37,7 @@ def __init__(self): (r"/api/getAround",GetArroundEvent.GetArroundEvent)] tornado.web.Application.__init__(self,handlers,**settings) self.dbapi=dbapi.dbapi() + self.util=util.util() if __name__=="__main__": diff --git a/code/static/avatar/test.png b/code/static/avatar/test.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3c1c1a31c25e423a3094eb9fa3f73ab6cdd0f6 GIT binary patch literal 143877 zcmcF~1y3bR&o=J5_~Opu?hcFF;_mM5aL|LhySux)>sj1kaks@5Iq=@k_aDAVnn@>3 zn#^=My{2uHijp)c(sv{X2nbYJ8A(+L2uSw-5dz$QD?a1;WB*N%ZmQDa5cTs!=l?M< zR$_``5D-lX$R8%K|M7^SlJ^5B>Rk>GbiuzW(B%x|UIe-e4(L23r=6^*rj$y<+kaf12#Zaw#`&R^!--`0}# zTfAiV#@z>QV-!GI8TZ_P>$kh>3nvKkavoX7d8^yRbJS A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# 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 literal 0 HcmV?d00001 diff --git a/code/util.py b/code/util.py new file mode 100644 index 0000000..6c3d320 --- /dev/null +++ b/code/util.py @@ -0,0 +1,19 @@ +import json,os,base64 + +class util: + def __init__(self): + pass + + def setAvatar(self,username,filestring,dbapi): + userid=dbapi.getUserByUserName(j['username'])['id'] + avatar=open(os.path.abspath('./static/avatar/'+str(userid)+".png"),"wb"); + avatar.write(base64.standard_b64decode(filestring)) + avatar.close() + + def getAvatar(self,username,dbapi): + userid=dbapi.getUserByUserName(j['username'])['id'] + avatar=open(os.path.abspath('./static/avatar/'+str(userid)+".png"),"rb"); + result="" + result=base64.standard_b64encode(avatar.read()) + avatar.close() + return result \ No newline at end of file From 9994c9455121eeef548faae2e2d7c5b76cf2e6aa Mon Sep 17 00:00:00 2001 From: Anton Zhong Date: Thu, 17 Jul 2014 09:06:16 +0800 Subject: [PATCH 38/66] Fix avatar get&set bug. --- code/handler/LoginHandler.py | 3 ++- code/handler/RegisterHandler.py | 4 ++-- code/static/avatar/28.png | Bin 0 -> 143877 bytes code/util.py | 4 ++-- 4 files changed, 6 insertions(+), 5 deletions(-) create mode 100644 code/static/avatar/28.png diff --git a/code/handler/LoginHandler.py b/code/handler/LoginHandler.py index 7530010..31123de 100644 --- a/code/handler/LoginHandler.py +++ b/code/handler/LoginHandler.py @@ -10,7 +10,7 @@ def get(self): def post(self): #content =self.request.body - content = '{"username":"test","password":"test"}' + content = '{"username":"12","password":"1"}' j = json.loads(content) if(j['username'].strip()=='' or j['password'].strip()==''): self.write("{'state':1}") @@ -28,4 +28,5 @@ def post(self): self.application.dbapi.updateUserstate(user['id'],1) self.write("{'state':3}") print("Login success") + print self.application.util.getAvatar("12",self.application.dbapi) return diff --git a/code/handler/RegisterHandler.py b/code/handler/RegisterHandler.py index 5d405a3..120e863 100644 --- a/code/handler/RegisterHandler.py +++ b/code/handler/RegisterHandler.py @@ -10,7 +10,7 @@ def get(self): def post(self): #content = self.get_argument("content") - content = '{"username": "8","password": "1","kind": 1, "cardid":"8" ,"realname":"1","sex":1,"age":1, "address":"1","illness":"1","file":"1"}' + content = '{"username": "12","password": "1","kind": 1, "cardid":"12" ,"realname":"1","sex":1,"age":1, "address":"1","illness":"1","file":"1"}' j = json.loads(content) if(self.application.dbapi.getUserByUserName(j['username']) is not None): self.write("{'state':1}") @@ -25,7 +25,7 @@ def post(self): #test avatar=open(os.path.abspath('./static/avatar/test.png'),"rb"); filestring=base64.standard_b64encode(avatar.read()) - self.util.setAvatar(j['username'],filestring,self.application.dbapi) + self.application.util.setAvatar(j['username'],filestring,self.application.dbapi) u = self.application.dbapi.getUserByUserName(j['username']); self.write("{'state':3}") diff --git a/code/static/avatar/28.png b/code/static/avatar/28.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3c1c1a31c25e423a3094eb9fa3f73ab6cdd0f6 GIT binary patch literal 143877 zcmcF~1y3bR&o=J5_~Opu?hcFF;_mM5aL|LhySux)>sj1kaks@5Iq=@k_aDAVnn@>3 zn#^=My{2uHijp)c(sv{X2nbYJ8A(+L2uSw-5dz$QD?a1;WB*N%ZmQDa5cTs!=l?M< zR$_``5D-lX$R8%K|M7^SlJ^5B>Rk>GbiuzW(B%x|UIe-e4(L23r=6^*rj$y<+kaf12#Zaw#`&R^!--`0}# zTfAiV#@z>QV-!GI8TZ_P>$kh>3nvKkavoX7d8^yRbJS A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# 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 literal 0 HcmV?d00001 diff --git a/code/util.py b/code/util.py index 6c3d320..4e68799 100644 --- a/code/util.py +++ b/code/util.py @@ -5,13 +5,13 @@ def __init__(self): pass def setAvatar(self,username,filestring,dbapi): - userid=dbapi.getUserByUserName(j['username'])['id'] + userid=dbapi.getUserByUserName(username)['id'] avatar=open(os.path.abspath('./static/avatar/'+str(userid)+".png"),"wb"); avatar.write(base64.standard_b64decode(filestring)) avatar.close() def getAvatar(self,username,dbapi): - userid=dbapi.getUserByUserName(j['username'])['id'] + userid=dbapi.getUserByUserName(username)['id'] avatar=open(os.path.abspath('./static/avatar/'+str(userid)+".png"),"rb"); result="" result=base64.standard_b64encode(avatar.read()) From ed5fd0ae0fc61126aee982b1754bb83ab84a505e Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Thu, 17 Jul 2014 11:54:13 +0800 Subject: [PATCH 39/66] add follow table and some methods,handler --- code/dbapi.py | 56 ++++++++++++++++++++++++++++ code/handler/HistoryHandler.py | 10 +++-- code/handler/RegisterHandler.py | 6 +-- code/handler/__init__.py | 2 + code/handler/cancelFollowHandler.py | 21 +++++++++++ code/handler/startFollowHandler.py | 20 ++++++++++ code/main.py | 4 +- code/static/avatar/8.png | Bin 0 -> 143877 bytes code/util.py | 14 ++++++- db.sql | 12 ++++++ 10 files changed, 135 insertions(+), 10 deletions(-) create mode 100644 code/handler/cancelFollowHandler.py create mode 100644 code/handler/startFollowHandler.py create mode 100644 code/static/avatar/8.png diff --git a/code/dbapi.py b/code/dbapi.py index 4e760e4..d8d0741 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -104,6 +104,62 @@ def getEventsByUserName(self,username): return [] return self.getEventsByUserId(user["id"]) + #get supports by uid + def getSupportsbyUid(self,uid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select user.name,support.eid,support.content,support.time from support,user where usrid = user.id and usrid = %s" + param=(uid,) + cursor.execute(sql,param) + result=cursor.fetchall() + cursor.close() + return list(result) + + #get supports by username + def getSupportsbyUsername(self,username): + user=self.getUserByUserName(username) + if(not user): + return [] + return self.getSupportsbyUid(user["id"]) + + #insert follow uid->eid + def insertFollow(self,uid,eid): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + cursor.execute("select now()") + currentTime=cursor.fetchone() + sql = "insert into follow(eid,usrid,time) values(%s,%s,%s)" + param = (eid,uid,currentTime['now()']) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + cursor.close() + return + + #delect follow uid->eid + def delectFollow(self,uid,eid): + cursor = self.db.cursor() + sql = "delete follow where eid = %s and usrid = %s" + param = (eid,uid) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + cursor.close() + return + + #get follow by uid,eid + #if no recode,rerun None;else return dir + def getFollow(self,uid,eid): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select * from follow where eid = %s and usrid = %s" + param = (eid,uid) + cursor.execute(sql,param) + result=cursor.fetchone() + cursor.close() + return result + #check if cardid exist #exist return dict #not exist return none diff --git a/code/handler/HistoryHandler.py b/code/handler/HistoryHandler.py index 69a5f9c..88d1252 100644 --- a/code/handler/HistoryHandler.py +++ b/code/handler/HistoryHandler.py @@ -8,8 +8,10 @@ def get(self): self.write("

historyHandler

") def post(self): - content='{"id":1,"name":"ooo"}' + content='{"id":2,"name":"ooo"}' jobj=json.loads(content) - #his1=self.application.dbapi.getEventsByUserId(jobj['id']) - his2=self.application.dbapi.getEventsByUserName(jobj['name']) - self.write(str(his2)) \ No newline at end of file + events=self.application.dbapi.getEventsByUserId(jobj['id']) + #result=self.application.dbapi.getEventsByUserName(jobj['name']) + supports = self.application.dbapi.getSupportsbyUid(jobj['id']) + + self.write('{events:'+str(events)+',"supports":'+str(supports)) \ No newline at end of file diff --git a/code/handler/RegisterHandler.py b/code/handler/RegisterHandler.py index 120e863..2bf9fb2 100644 --- a/code/handler/RegisterHandler.py +++ b/code/handler/RegisterHandler.py @@ -10,7 +10,7 @@ def get(self): def post(self): #content = self.get_argument("content") - content = '{"username": "12","password": "1","kind": 1, "cardid":"12" ,"realname":"1","sex":1,"age":1, "address":"1","illness":"1","file":"1"}' + content = '{"username": "test","password": "1","kind": 1, "cardid":"test" ,"realname":"1","sex":1,"age":1, "address":"1","illness":"1","file":"1"}' j = json.loads(content) if(self.application.dbapi.getUserByUserName(j['username']) is not None): self.write("{'state':1}") @@ -30,6 +30,4 @@ def post(self): u = self.application.dbapi.getUserByUserName(j['username']); self.write("{'state':3}") print("Register") - return - - \ No newline at end of file + return \ No newline at end of file diff --git a/code/handler/__init__.py b/code/handler/__init__.py index 0d5ca95..1aecfa3 100644 --- a/code/handler/__init__.py +++ b/code/handler/__init__.py @@ -17,4 +17,6 @@ "EventHandler", "UpdateCid", "UpdateUserInfoHandler", + "startFollowHandler", + "cancelFollowHandler", "GetArroundEvent"] diff --git a/code/handler/cancelFollowHandler.py b/code/handler/cancelFollowHandler.py new file mode 100644 index 0000000..38613d6 --- /dev/null +++ b/code/handler/cancelFollowHandler.py @@ -0,0 +1,21 @@ +import tornado.ioloop +import tornado.web +import tornado.httpserver +import json + +class cancelFollowHandler(tornado.web.RequestHandler): + def get(self): + self.write("

cancelFollowHandler

") + + def post(self): + content='{"id":2,"name":"ooo"}' + jobj=json.loads(content) + pass + """ + 传入格式{username:,eid:} + 先判断user是否存在,不存在返回状态2 + 取消前用getFollow判断是否已经关注 + 没关注过直接返回状态3, + 否则取消关注delectFollow,返回状态1 + 返回格式{state:x} + """ \ No newline at end of file diff --git a/code/handler/startFollowHandler.py b/code/handler/startFollowHandler.py new file mode 100644 index 0000000..f95851e --- /dev/null +++ b/code/handler/startFollowHandler.py @@ -0,0 +1,20 @@ +import tornado.ioloop +import tornado.web +import tornado.httpserver +import json + +class startFollowHandler(tornado.web.RequestHandler): + def get(self): + self.write("

startFollowHandler

") + + def post(self): + pass + """ + 传入格式{username:,eid:} + 先判断user是否存在,不存在返回状态2 + {username:,eid:} + 关注前用getFollow判断是否已经关注 + 关注过则直接返回状态3, + 否则关注insertFollow,返回状态1 + 返回格式{state:x} + """ \ No newline at end of file diff --git a/code/main.py b/code/main.py index 537b5cf..ec0c974 100644 --- a/code/main.py +++ b/code/main.py @@ -35,7 +35,9 @@ def __init__(self): (r"/api/event",EventHandler.EventHandler), (r"/api/updatecid",UpdateCid.UpdateCid), (r"/api/updateuserinfo",UpdateUserInfoHandler.UpdateUserInfoHandler), - (r"/api/getAround",GetArroundEvent.GetArroundEvent)] + (r"/api/getAround",GetArroundEvent.GetArroundEvent), + (r"/api/startfollow",startFollowHandler.startFollowHandler), + (r"/api/cancelfollow",cancelFollowHandler.cancelFollowHandler)] tornado.web.Application.__init__(self,handlers,**settings) self.dbapi=dbapi.dbapi() self.util=util.util() diff --git a/code/static/avatar/8.png b/code/static/avatar/8.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3c1c1a31c25e423a3094eb9fa3f73ab6cdd0f6 GIT binary patch literal 143877 zcmcF~1y3bR&o=J5_~Opu?hcFF;_mM5aL|LhySux)>sj1kaks@5Iq=@k_aDAVnn@>3 zn#^=My{2uHijp)c(sv{X2nbYJ8A(+L2uSw-5dz$QD?a1;WB*N%ZmQDa5cTs!=l?M< zR$_``5D-lX$R8%K|M7^SlJ^5B>Rk>GbiuzW(B%x|UIe-e4(L23r=6^*rj$y<+kaf12#Zaw#`&R^!--`0}# zTfAiV#@z>QV-!GI8TZ_P>$kh>3nvKkavoX7d8^yRbJS A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# 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 literal 0 HcmV?d00001 diff --git a/code/util.py b/code/util.py index 4e68799..eb3cdbb 100644 --- a/code/util.py +++ b/code/util.py @@ -16,4 +16,16 @@ def getAvatar(self,username,dbapi): result="" result=base64.standard_b64encode(avatar.read()) avatar.close() - return result \ No newline at end of file + return result + + def setAvatarbyUid(self,uid,filestring): + avatar=open(os.path.abspath('./static/avatar/'+str(uid)+".png"),"wb"); + avatar.write(base64.standard_b64decode(filestring)) + avatar.close() + + def getAvatarbyUid(self,uid): + avatar=open(os.path.abspath('./static/avatar/'+str(uid)+".png"),"rb"); + result="" + result=base64.standard_b64encode(avatar.read()) + avatar.close() + return result diff --git a/db.sql b/db.sql index 16507d7..792c0a9 100644 --- a/db.sql +++ b/db.sql @@ -1,6 +1,7 @@ drop table IF EXISTS tpu; drop table IF EXISTS support; drop table IF EXISTS helper; +drop table IF EXISTS follow; drop table IF EXISTS event; drop table IF EXISTS relation; drop table IF EXISTS info; @@ -129,6 +130,17 @@ CREATE TABLE helper ON DELETE CASCADE )DEFAULT CHARSET=utf8; + + CREATE TABLE follow +( + eid int NOT NULL, + usrid int NOT NULL, + time datetime, + primary key(eid,usrid), + foreign key(eid) references event(id) ON DELETE CASCADE, + foreign key(usrid) references user(id) ON DELETE CASCADE +)DEFAULT CHARSET=utf8; + /* 事件<>援助信息表 每条记录存储事件id和对应的援助信息内容及帮客用户id From d6d1e4d28e08f47779403111d4d19d488b32286e Mon Sep 17 00:00:00 2001 From: dage <641846382@qq.com> Date: Thu, 17 Jul 2014 15:09:09 +0800 Subject: [PATCH 40/66] 2014/7/17 by linhu --- code/dbapi.py | 2 +- code/handler/cancelFollowHandler.py | 25 +++++++++++++++---------- code/handler/startFollowHandler.py | 25 +++++++++++++++---------- 3 files changed, 31 insertions(+), 21 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index d8d0741..c296a7f 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -139,7 +139,7 @@ def insertFollow(self,uid,eid): #delect follow uid->eid def delectFollow(self,uid,eid): cursor = self.db.cursor() - sql = "delete follow where eid = %s and usrid = %s" + sql = "delete from follow where eid = %s and usrid = %s" param = (eid,uid) try: cursor.execute(sql,param) diff --git a/code/handler/cancelFollowHandler.py b/code/handler/cancelFollowHandler.py index 38613d6..b6c8228 100644 --- a/code/handler/cancelFollowHandler.py +++ b/code/handler/cancelFollowHandler.py @@ -9,13 +9,18 @@ def get(self): def post(self): content='{"id":2,"name":"ooo"}' - jobj=json.loads(content) - pass - """ - 传入格式{username:,eid:} - 先判断user是否存在,不存在返回状态2 - 取消前用getFollow判断是否已经关注 - 没关注过直接返回状态3, - 否则取消关注delectFollow,返回状态1 - 返回格式{state:x} - """ \ No newline at end of file + j=json.loads(content) + user=self.application.dbapi.getUserByUserName(j['name'])["id"] + if(user): + if(self.application.dbapi.getFollow(user["id"],j['id'])): + self.application.dbapi.delectFollow(user["id"],j['id']) + data=[{'state':1}]#delete follow success + result=json.dumps(data) + else: + data=[{'state':3}]#have no follow + result=json.dumps(data) + else: + data=[{'state':2}]#user no exist + result=json.dumps(data) + #return result + diff --git a/code/handler/startFollowHandler.py b/code/handler/startFollowHandler.py index f95851e..b5e9ca6 100644 --- a/code/handler/startFollowHandler.py +++ b/code/handler/startFollowHandler.py @@ -8,13 +8,18 @@ def get(self): self.write("

startFollowHandler

") def post(self): - pass - """ - 传入格式{username:,eid:} - 先判断user是否存在,不存在返回状态2 - {username:,eid:} - 关注前用getFollow判断是否已经关注 - 关注过则直接返回状态3, - 否则关注insertFollow,返回状态1 - 返回格式{state:x} - """ \ No newline at end of file + content='{"id":2,"name":"ooo"}' + j=json.loads(content) + user=self.application.dbapi.getUserByUserName(j['name'])["id"] + if(user): + if(self.application.dbapi.getFollow(user["id"],j['id'])): + data=[{'state':3}]#have been followed + result=json.dumps(data) + else: + self.application.dbapi.insertFollow(user["id"],j['id']) + data=[{'state':1}]#start follow success + result=json.dumps(data) + else: + data=[{'state':2}]#user no exist + result=json.dumps(data) + #return result \ No newline at end of file From 1c8afe3e9f0c16d0b2daf35c9c6dad06c5fcca58 Mon Sep 17 00:00:00 2001 From: dage <641846382@qq.com> Date: Thu, 17 Jul 2014 15:17:03 +0800 Subject: [PATCH 41/66] 2014/7/17 bylinhu 2.0 --- code/handler/cancelFollowHandler.py | 12 ++++++------ code/handler/startFollowHandler.py | 12 ++++++------ 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/code/handler/cancelFollowHandler.py b/code/handler/cancelFollowHandler.py index b6c8228..5019eb3 100644 --- a/code/handler/cancelFollowHandler.py +++ b/code/handler/cancelFollowHandler.py @@ -8,19 +8,19 @@ def get(self): self.write("

cancelFollowHandler

") def post(self): - content='{"id":2,"name":"ooo"}' + content='{"eid":2,"name":"ooo"}' j=json.loads(content) user=self.application.dbapi.getUserByUserName(j['name'])["id"] if(user): - if(self.application.dbapi.getFollow(user["id"],j['id'])): - self.application.dbapi.delectFollow(user["id"],j['id']) - data=[{'state':1}]#delete follow success + if(self.application.dbapi.getFollow(user["id"],j['eid'])): + self.application.dbapi.delectFollow(user["id"],j['eid']) + data=[{'state':1},{'desc':"delete follow success"}]#delete follow success result=json.dumps(data) else: - data=[{'state':3}]#have no follow + data=[{'state':3},{'desc':"have no follow"}]#have no follow result=json.dumps(data) else: - data=[{'state':2}]#user no exist + data=[{'state':2},{'desc':"user no exist"}]#user no exist result=json.dumps(data) #return result diff --git a/code/handler/startFollowHandler.py b/code/handler/startFollowHandler.py index b5e9ca6..0287450 100644 --- a/code/handler/startFollowHandler.py +++ b/code/handler/startFollowHandler.py @@ -8,18 +8,18 @@ def get(self): self.write("

startFollowHandler

") def post(self): - content='{"id":2,"name":"ooo"}' + content='{"eid":2,"name":"ooo"}' j=json.loads(content) user=self.application.dbapi.getUserByUserName(j['name'])["id"] if(user): - if(self.application.dbapi.getFollow(user["id"],j['id'])): - data=[{'state':3}]#have been followed + if(self.application.dbapi.getFollow(user["id"],j['eid'])): + data=[{'state':3},{'desc':"have been followed"}]#have been followed result=json.dumps(data) else: - self.application.dbapi.insertFollow(user["id"],j['id']) - data=[{'state':1}]#start follow success + self.application.dbapi.insertFollow(user["id"],j['eid']) + data=[{'state':1},{'desc':"start follow success"}]#start follow success result=json.dumps(data) else: - data=[{'state':2}]#user no exist + data=[{'state':2},{'desc':"user no exist"}]#user no exist result=json.dumps(data) #return result \ No newline at end of file From 74f45eca2ebcaae5bc93e34f7f7088f58ec860f7 Mon Sep 17 00:00:00 2001 From: Anton Zhong Date: Thu, 17 Jul 2014 17:17:59 +0800 Subject: [PATCH 42/66] add getSupportsByEventId,. --- code/dbapi.py | 16 ++++++++++++++++ code/handler/EventHandler.py | 12 +++++++----- 2 files changed, 23 insertions(+), 5 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 6dacf04..a6a9f3e 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -451,5 +451,21 @@ def setCreditByEventIdAndUserName(self,eid,username,credit): return {"errorCode":200,"errorDesc":""} #07/10 + def getSupportsByEventId(self,eid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select * from support where eid=%s" + param=(eid,) + cursor.execute(sql,param) + result=cursor.fetchall() + if(result==tuple()): + return dict() + else: + i=0 + re=dict() + while(ieventHandler

") def post(self): + #conteng=self.request.body content='{"eventid":1}' jobj=json.loads(content) - event=self.application.dbapi.getEventByEventId(jobj['eventid']) - if(event): - self.write(str(event)) - else: - self.write("No event for eventid: "+str(jobj['eventid'])) \ No newline at end of file + helpevent=self.application.dbapi.getEventByEventId(jobj['eventid']) + result={} + if(helpevent): + result['event']=(helpevent) + result['support']=self.application.dbapi.getSupportsByEventId(jobj['eventid']) + return result \ No newline at end of file From ec24a953a6f6b5e3155d9cf46a622a02acb1824d Mon Sep 17 00:00:00 2001 From: Anton Zhong Date: Thu, 17 Jul 2014 17:20:12 +0800 Subject: [PATCH 43/66] Add comments. --- code/handler/EventHandler.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/code/handler/EventHandler.py b/code/handler/EventHandler.py index 2dda670..2c909b4 100644 --- a/code/handler/EventHandler.py +++ b/code/handler/EventHandler.py @@ -7,8 +7,10 @@ class EventHandler(tornado.web.RequestHandler): def get(self): self.write("

eventHandler

") + #return format + #{event:{},support:{0:{},1:{}}} def post(self): - #conteng=self.request.body + #content=self.request.body content='{"eventid":1}' jobj=json.loads(content) helpevent=self.application.dbapi.getEventByEventId(jobj['eventid']) From b1e0c67cffd314a8af12c92dadffb21ae11d88bb Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Thu, 17 Jul 2014 17:27:00 +0800 Subject: [PATCH 44/66] add push --- code/dbapi.py | 6 +- code/handler/CheckrelativesHandler.py | 9 +- code/handler/GetArroundEvent.py | 8 +- code/handler/HelpmessageHandler.py | 9 +- code/handler/HistoryHandler.py | 16 +- code/handler/LoginHandler.py | 6 +- code/handler/RegisterHandler.py | 14 +- code/handler/cancelFollowHandler.py | 1 + code/handler/startFollowHandler.py | 1 + code/main.py | 2 + code/push/__init__.py | 92 + code/push/get_push_result.py | 31 + code/push/google/__init__.py | 1 + code/push/google/protobuf/__init__.py | 0 .../push/google/protobuf/compiler/__init__.py | 0 .../google/protobuf/compiler/plugin_pb2.py | 166 + code/push/google/protobuf/descriptor.py | 713 +++ .../google/protobuf/descriptor_database.py | 120 + code/push/google/protobuf/descriptor_pb2.py | 1346 +++++ code/push/google/protobuf/descriptor_pool.py | 527 ++ .../push/google/protobuf/internal/__init__.py | 0 .../protobuf/internal/api_implementation.py | 87 + .../google/protobuf/internal/containers.py | 269 + .../google/protobuf/internal/cpp_message.py | 663 +++ code/push/google/protobuf/internal/decoder.py | 720 +++ .../internal/descriptor_database_test.py | 63 + .../protobuf/internal/descriptor_pool_test.py | 220 + .../protobuf/internal/descriptor_test.py | 613 +++ code/push/google/protobuf/internal/encoder.py | 769 +++ .../protobuf/internal/enum_type_wrapper.py | 89 + .../protobuf/internal/factory_test1.proto | 55 + .../protobuf/internal/factory_test1_pb2.py | 170 + .../protobuf/internal/factory_test2.proto | 77 + .../protobuf/internal/factory_test2_pb2.py | 347 ++ .../protobuf/internal/generator_test.py | 269 + .../protobuf/internal/message_cpp_test.py | 45 + .../protobuf/internal/message_factory_test.py | 113 + .../protobuf/internal/message_listener.py | 78 + .../google/protobuf/internal/message_test.py | 494 ++ .../protobuf/internal/more_extensions.proto | 58 + .../internal/more_extensions_dynamic.proto | 49 + .../internal/more_extensions_dynamic_pb2.py | 77 + .../protobuf/internal/more_extensions_pb2.py | 159 + .../protobuf/internal/more_messages.proto | 51 + .../protobuf/internal/more_messages_pb2.py | 89 + .../protobuf/internal/python_message.py | 1150 +++++ .../internal/reflection_cpp_generated_test.py | 91 + .../protobuf/internal/reflection_test.py | 2671 ++++++++++ .../internal/service_reflection_test.py | 136 + .../internal/test_bad_identifiers.proto | 52 + .../internal/test_bad_identifiers_pb2.py | 137 + .../google/protobuf/internal/test_util.py | 651 +++ .../protobuf/internal/text_format_test.py | 617 +++ .../google/protobuf/internal/type_checkers.py | 286 ++ .../protobuf/internal/unknown_fields_test.py | 170 + .../google/protobuf/internal/wire_format.py | 268 + .../protobuf/internal/wire_format_test.py | 253 + code/push/google/protobuf/message.py | 280 ++ code/push/google/protobuf/message_factory.py | 113 + .../google/protobuf/pyext/python-proto2.cc | 1717 +++++++ .../protobuf/pyext/python_descriptor.cc | 337 ++ .../google/protobuf/pyext/python_descriptor.h | 87 + .../google/protobuf/pyext/python_protobuf.cc | 63 + .../google/protobuf/pyext/python_protobuf.h | 57 + code/push/google/protobuf/reflection.py | 169 + code/push/google/protobuf/service.py | 226 + .../google/protobuf/service_reflection.py | 284 ++ code/push/google/protobuf/text_format.py | 739 +++ .../protobuf/unittest_custom_options_pb2.py | 1486 ++++++ .../google/protobuf/unittest_import_pb2.py | 91 + .../protobuf/unittest_import_public_pb2.py | 59 + .../push/google/protobuf/unittest_mset_pb2.py | 255 + .../unittest_no_generic_services_pb2.py | 86 + code/push/google/protobuf/unittest_pb2.py | 4440 +++++++++++++++++ code/push/igetui/__init__.py | 2 + code/push/igetui/igt_message.py | 24 + code/push/igetui/igt_target.py | 6 + code/push/igetui/template/__init__.py | 2 + .../push/igetui/template/igt_base_template.py | 103 + .../push/igetui/template/igt_link_template.py | 59 + .../template/igt_notification_template.py | 69 + .../template/igt_notypopload_template.py | 92 + .../template/igt_transmission_template.py | 46 + code/push/igt_push.py | 163 + code/push/protobuf/__init__.py | 2 + code/push/protobuf/gt_req_pb2.py | 1925 +++++++ 86 files changed, 28127 insertions(+), 29 deletions(-) create mode 100644 code/push/__init__.py create mode 100644 code/push/get_push_result.py create mode 100644 code/push/google/__init__.py create mode 100644 code/push/google/protobuf/__init__.py create mode 100644 code/push/google/protobuf/compiler/__init__.py create mode 100644 code/push/google/protobuf/compiler/plugin_pb2.py create mode 100644 code/push/google/protobuf/descriptor.py create mode 100644 code/push/google/protobuf/descriptor_database.py create mode 100644 code/push/google/protobuf/descriptor_pb2.py create mode 100644 code/push/google/protobuf/descriptor_pool.py create mode 100644 code/push/google/protobuf/internal/__init__.py create mode 100644 code/push/google/protobuf/internal/api_implementation.py create mode 100644 code/push/google/protobuf/internal/containers.py create mode 100644 code/push/google/protobuf/internal/cpp_message.py create mode 100644 code/push/google/protobuf/internal/decoder.py create mode 100644 code/push/google/protobuf/internal/descriptor_database_test.py create mode 100644 code/push/google/protobuf/internal/descriptor_pool_test.py create mode 100644 code/push/google/protobuf/internal/descriptor_test.py create mode 100644 code/push/google/protobuf/internal/encoder.py create mode 100644 code/push/google/protobuf/internal/enum_type_wrapper.py create mode 100644 code/push/google/protobuf/internal/factory_test1.proto create mode 100644 code/push/google/protobuf/internal/factory_test1_pb2.py create mode 100644 code/push/google/protobuf/internal/factory_test2.proto create mode 100644 code/push/google/protobuf/internal/factory_test2_pb2.py create mode 100644 code/push/google/protobuf/internal/generator_test.py create mode 100644 code/push/google/protobuf/internal/message_cpp_test.py create mode 100644 code/push/google/protobuf/internal/message_factory_test.py create mode 100644 code/push/google/protobuf/internal/message_listener.py create mode 100644 code/push/google/protobuf/internal/message_test.py create mode 100644 code/push/google/protobuf/internal/more_extensions.proto create mode 100644 code/push/google/protobuf/internal/more_extensions_dynamic.proto create mode 100644 code/push/google/protobuf/internal/more_extensions_dynamic_pb2.py create mode 100644 code/push/google/protobuf/internal/more_extensions_pb2.py create mode 100644 code/push/google/protobuf/internal/more_messages.proto create mode 100644 code/push/google/protobuf/internal/more_messages_pb2.py create mode 100644 code/push/google/protobuf/internal/python_message.py create mode 100644 code/push/google/protobuf/internal/reflection_cpp_generated_test.py create mode 100644 code/push/google/protobuf/internal/reflection_test.py create mode 100644 code/push/google/protobuf/internal/service_reflection_test.py create mode 100644 code/push/google/protobuf/internal/test_bad_identifiers.proto create mode 100644 code/push/google/protobuf/internal/test_bad_identifiers_pb2.py create mode 100644 code/push/google/protobuf/internal/test_util.py create mode 100644 code/push/google/protobuf/internal/text_format_test.py create mode 100644 code/push/google/protobuf/internal/type_checkers.py create mode 100644 code/push/google/protobuf/internal/unknown_fields_test.py create mode 100644 code/push/google/protobuf/internal/wire_format.py create mode 100644 code/push/google/protobuf/internal/wire_format_test.py create mode 100644 code/push/google/protobuf/message.py create mode 100644 code/push/google/protobuf/message_factory.py create mode 100644 code/push/google/protobuf/pyext/python-proto2.cc create mode 100644 code/push/google/protobuf/pyext/python_descriptor.cc create mode 100644 code/push/google/protobuf/pyext/python_descriptor.h create mode 100644 code/push/google/protobuf/pyext/python_protobuf.cc create mode 100644 code/push/google/protobuf/pyext/python_protobuf.h create mode 100644 code/push/google/protobuf/reflection.py create mode 100644 code/push/google/protobuf/service.py create mode 100644 code/push/google/protobuf/service_reflection.py create mode 100644 code/push/google/protobuf/text_format.py create mode 100644 code/push/google/protobuf/unittest_custom_options_pb2.py create mode 100644 code/push/google/protobuf/unittest_import_pb2.py create mode 100644 code/push/google/protobuf/unittest_import_public_pb2.py create mode 100644 code/push/google/protobuf/unittest_mset_pb2.py create mode 100644 code/push/google/protobuf/unittest_no_generic_services_pb2.py create mode 100644 code/push/google/protobuf/unittest_pb2.py create mode 100644 code/push/igetui/__init__.py create mode 100644 code/push/igetui/igt_message.py create mode 100644 code/push/igetui/igt_target.py create mode 100644 code/push/igetui/template/__init__.py create mode 100644 code/push/igetui/template/igt_base_template.py create mode 100644 code/push/igetui/template/igt_link_template.py create mode 100644 code/push/igetui/template/igt_notification_template.py create mode 100644 code/push/igetui/template/igt_notypopload_template.py create mode 100644 code/push/igetui/template/igt_transmission_template.py create mode 100644 code/push/igt_push.py create mode 100644 code/push/protobuf/__init__.py create mode 100644 code/push/protobuf/gt_req_pb2.py diff --git a/code/dbapi.py b/code/dbapi.py index d8d0741..3256531 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -9,8 +9,8 @@ class dbapi: def __init__(self): self.host="localhost" - self.user="root" - self.passwd="root" + self.user="comhelp" + self.passwd="20140629" self.dbname="community" self.charset="utf8" self.db=MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.dbname,charset=self.charset) @@ -73,7 +73,7 @@ def CheckRelationbyId(self,userid): def getUsermassegeByUserId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="select user.name,info.name as realname,info.sex,info.age,info.address,info.illness,info.credit,info.score from user ,info where user.id=%s and info.id=%s" + sql="select user.id,user.name,info.name as realname,info.sex,info.age,info.address,info.illness,info.credit,info.score from user ,info where user.id=%s and info.id=%s" param=(userid,userid) cursor.execute(sql,param) result=cursor.fetchone() diff --git a/code/handler/CheckrelativesHandler.py b/code/handler/CheckrelativesHandler.py index 6da0d55..a49cba9 100644 --- a/code/handler/CheckrelativesHandler.py +++ b/code/handler/CheckrelativesHandler.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import tornado.ioloop import tornado.web import tornado.httpserver @@ -15,10 +16,10 @@ def post(self): if re!=(): relatives=[] for row in re: - name=self.application.dbapi.getUsermassegeByUserId(row["cid"]) - print name - relatives.append(name) - data={'state':1,'ralatives':str(relatives)} + info=self.application.dbapi.getUsermassegeByUserId(row["cid"]) + #relatives.append('{"info":'+str(info)+',"avatar":'+self.application.util.getAvatarbyUid(info['id'])+'}') + relatives.append(info) + data={'state':1,'ralatives':relatives} else: data={'state':1,'relatives':'[]'} self.write(data) diff --git a/code/handler/GetArroundEvent.py b/code/handler/GetArroundEvent.py index 5f0212c..569fbac 100644 --- a/code/handler/GetArroundEvent.py +++ b/code/handler/GetArroundEvent.py @@ -8,14 +8,14 @@ def get(self): self.write("

GetArroundEvent

") def post(self): - #content =self.request.body - content='{"username":"test1"}' + content =self.request.body + #content='{"username":"test1"}' j=json.loads(content) - user = self.application.dbapi.getUserAllinfobyName(j['username']) + user = self.application.dbapi.getUserInfobyName(j['username']) if(user is None): self.write("{'state':2}") print "username not exist" return - result = self.application.dbapi.getUserAround(user['longitude'],user['latitude'],150) + result = self.application.dbapi.getEventAround(user['longitude'],user['latitude'],150) self.write("{'state':1,aids:"+str(result)+"}") return diff --git a/code/handler/HelpmessageHandler.py b/code/handler/HelpmessageHandler.py index 7cba0f0..0bd64a4 100644 --- a/code/handler/HelpmessageHandler.py +++ b/code/handler/HelpmessageHandler.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import tornado.ioloop import tornado.web import tornado.httpserver @@ -8,15 +9,15 @@ def get(self): self.write("

HelpmessageHandler

") def post(self): - #content =self.request.body - content='{"username":"test1","message":{"kind":1,"content":"TestContent","assist":"TestAssist","latitude":23.000000,"longitude":23.000000}}' + content =self.request.body + #content='{"username":"test1","message":{"kind":1,"content":"TestContent","assist":"TestAssist","latitude":23.000000,"longitude":23.000000}}' jobj=json.loads(content) - result=self.application.dbapi.addEventByUserName(jobj["username"],jobj["message"]) + result = self.application.dbapi.addEventByUserName(jobj["username"],jobj["message"]) #add push message,make all distance 5km if(result["state"] == 1): info = self.application.dbapi.getUserInfobyName(jobj["username"]) cidlist = self.application.dbapi.getUserCidAround(info["longitude"],info["latitude"],5) - #push(cidlist) + self.application.push.pushToList(cidlist,content) self.write(str(result)) return \ No newline at end of file diff --git a/code/handler/HistoryHandler.py b/code/handler/HistoryHandler.py index 88d1252..f99546d 100644 --- a/code/handler/HistoryHandler.py +++ b/code/handler/HistoryHandler.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import tornado.ioloop import tornado.web import tornado.httpserver @@ -8,10 +9,17 @@ def get(self): self.write("

historyHandler

") def post(self): - content='{"id":2,"name":"ooo"}' + #content =self.request.body + content='{"name":"test3"}' jobj=json.loads(content) - events=self.application.dbapi.getEventsByUserId(jobj['id']) + user = self.application.dbapi.getUserByUserName(jobj['name']) + if(user is None): + self.write('{"state":2,"decs":"User not exist"}') + return + uid = user['id'] + events=self.application.dbapi.getEventsByUserId(uid) #result=self.application.dbapi.getEventsByUserName(jobj['name']) - supports = self.application.dbapi.getSupportsbyUid(jobj['id']) + supports = self.application.dbapi.getSupportsbyUid(uid) - self.write('{events:'+str(events)+',"supports":'+str(supports)) \ No newline at end of file + self.write('{"state":1,"events":'+str(events)+',"supports":'+str(supports)) + return \ No newline at end of file diff --git a/code/handler/LoginHandler.py b/code/handler/LoginHandler.py index 31123de..8e14dcc 100644 --- a/code/handler/LoginHandler.py +++ b/code/handler/LoginHandler.py @@ -9,8 +9,8 @@ def get(self): self.write("

LoginHandler

") def post(self): - #content =self.request.body - content = '{"username":"12","password":"1"}' + content =self.request.body + #content = '{"username":"12","password":"1"}' j = json.loads(content) if(j['username'].strip()=='' or j['password'].strip()==''): self.write("{'state':1}") @@ -28,5 +28,5 @@ def post(self): self.application.dbapi.updateUserstate(user['id'],1) self.write("{'state':3}") print("Login success") - print self.application.util.getAvatar("12",self.application.dbapi) + #print self.application.util.getAvatar("12",self.application.dbapi) return diff --git a/code/handler/RegisterHandler.py b/code/handler/RegisterHandler.py index 2bf9fb2..8f73863 100644 --- a/code/handler/RegisterHandler.py +++ b/code/handler/RegisterHandler.py @@ -9,8 +9,8 @@ def get(self): self.write("

RegisterHandler

") def post(self): - #content = self.get_argument("content") - content = '{"username": "test","password": "1","kind": 1, "cardid":"test" ,"realname":"1","sex":1,"age":1, "address":"1","illness":"1","file":"1"}' + content =self.request.body + #content = '{"username": "test","password": "1","kind": 1, "cardid":"test" ,"realname":"1","sex":1,"age":1, "address":"1","illness":"1","file":"1"}' j = json.loads(content) if(self.application.dbapi.getUserByUserName(j['username']) is not None): self.write("{'state':1}") @@ -23,11 +23,11 @@ def post(self): self.application.dbapi.register(j) #test - avatar=open(os.path.abspath('./static/avatar/test.png'),"rb"); - filestring=base64.standard_b64encode(avatar.read()) - self.application.util.setAvatar(j['username'],filestring,self.application.dbapi) + #avatar=open(os.path.abspath('./static/avatar/test.png'),"rb"); + #ilestring=base64.standard_b64encode(avatar.read()) + #self.application.util.setAvatar(j['username'],filestring,self.application.dbapi) - u = self.application.dbapi.getUserByUserName(j['username']); + #self.application.util.setAvatar(j['username'],j['file'],self.application.dbapi) self.write("{'state':3}") - print("Register") + print("Register success") return \ No newline at end of file diff --git a/code/handler/cancelFollowHandler.py b/code/handler/cancelFollowHandler.py index 38613d6..b6bf42b 100644 --- a/code/handler/cancelFollowHandler.py +++ b/code/handler/cancelFollowHandler.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import tornado.ioloop import tornado.web import tornado.httpserver diff --git a/code/handler/startFollowHandler.py b/code/handler/startFollowHandler.py index f95851e..27b5621 100644 --- a/code/handler/startFollowHandler.py +++ b/code/handler/startFollowHandler.py @@ -1,3 +1,4 @@ +# -*- coding: utf-8 -*- import tornado.ioloop import tornado.web import tornado.httpserver diff --git a/code/main.py b/code/main.py index ec0c974..0968b21 100644 --- a/code/main.py +++ b/code/main.py @@ -3,6 +3,7 @@ import tornado.httpserver import os,MySQLdb,dbapi,util from handler import * +from push import * #login url handler class IndexHandler(tornado.web.RequestHandler): @@ -41,6 +42,7 @@ def __init__(self): tornado.web.Application.__init__(self,handlers,**settings) self.dbapi=dbapi.dbapi() self.util=util.util() + self.push = Push() if __name__=="__main__": diff --git a/code/push/__init__.py b/code/push/__init__.py new file mode 100644 index 0000000..a32bd9d --- /dev/null +++ b/code/push/__init__.py @@ -0,0 +1,92 @@ +__all__=["Push"] + +from igt_push import * +from igetui.template import * +from igetui.template.igt_base_template import * +from igetui.template.igt_transmission_template import * +from igetui.template.igt_link_template import * +from igetui.template.igt_notification_template import * +from igetui.template.igt_notypopload_template import * +from igetui.igt_message import * +from igetui.igt_target import * +from igetui.template import * + +class Push: + + __APPKEY = "r3Gm2zkRsb8QLMq2U92Bi8" + __APPID = "0yZq9kruSq8zvSpYB2UiA1" + __MASTERSECRET = "h8Ppk4heNR6MACNWjN3XB2" + __HOST = 'http://sdk.open.api.igexin.com/apiex.htm' + + + __TEMPLATE = TransmissionTemplate() + + def __init__(self): + + self.__TEMPLATE = TransmissionTemplate() + self.__TEMPLATE.transmissionType = 2 + self.__TEMPLATE.appId = self.__APPID + self.__TEMPLATE.appKey = self.__APPKEY + + def pushToSingle(self, CID, content): + push = IGeTui(self.__HOST, self.__APPKEY, self.__MASTERSECRET) + + self.__TEMPLATE.transmissionContent = content + + message = IGtSingleMessage() + message.isOffline = True + message.offlineExpireTime = 1000 * 3600 * 12 + message.data = self.__TEMPLATE + + target = Target() + target.appId = self.__APPID + target.clientId = CID + + ret = push.pushMessageToSingle(message, target) + return ret + + def pushToList(self, CIDList, content, details=False): + push = IGeTui(self.__HOST, self.__APPKEY, self.__MASTERSECRET) + + self.__TEMPLATE.transmissionContent = content + + os.environ['needDetails'] = 'true' if details else 'false' + + message = IGtListMessage() + message.data = self.__TEMPLATE + message.isOffline = True + message.offlineExpireTime = 1000 * 3600 * 12 + + targets = []; + + for index in range(len(CIDList)): + target = Target() + target.appId = self.__APPID + target.clientId = CIDList[index] + targets.append(target) + + contentId = push.getContentId(message) + ret = push.pushMessageToList(contentId, targets) + return ret + + def pushToAll(self, content): + push = IGeTui(self.__HOST, self.__APPKEY, self.__MASTERSECRET) + + self.__TEMPLATE.transmissionContent = content + + message = IGtAppMessage() + message.data = self.__TEMPLATE + message.isOffline = True + message.offlineExpireTime = 1000 * 3600 * 12 + message.appIdList.extend([self.__APPID]) + + ret = push.pushMessageToApp(message) + return ret + + def getUserStatus(self, CID): + push = IGeTui(self.__HOST, self.__APPKEY, self.__MASTERSECRET) + return push.getClientIdStatus(self.__APPID, CID) + + def stopTask(self): + push = IGeTui(self.__HOST, self.__APPKEY, self.__MASTERSECRET) + return push.stop("OSA-0226_50RYYPFmos9eQEHZrkAf27") diff --git a/code/push/get_push_result.py b/code/push/get_push_result.py new file mode 100644 index 0000000..ce3223c --- /dev/null +++ b/code/push/get_push_result.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +#数据将在30分钟之后提供查询 +#最后更新时间为2013.10.22 +import hashlib +import urllib, urllib2, json +def getPushResult(url,appKey,masterSecret,taskId): + params = {} + params["action"] = "getPushMsgResult" + params["appkey"] = appKey + params["taskId"] = taskId + sign = createSign(params,masterSecret) + params["sign"] = sign + rep = httpPost(url,params) + return rep +def createSign(params,masterSecret): + sign = masterSecret + for (k,v) in params.items(): + sign = sign+k+v + return hashlib.md5(sign).hexdigest() +def httpPost(url, params): + data_json = json.dumps(params) + req = urllib2.Request(url, data_json) + res_stream = urllib2.urlopen(req, timeout = 60) + page_str = res_stream.read() + page_dict = eval(page_str) + return page_dict +rep = getPushResult("http://sdk.open.api.igexin.com/api.htm","tpDVam96sY8pxhwBupJ462","TBokfpttQJ6aHIhBE9y867","GT_1017_gJs4GvJxZV77gdgBKsuvO9") +print rep + + + diff --git a/code/push/google/__init__.py b/code/push/google/__init__.py new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/code/push/google/__init__.py @@ -0,0 +1 @@ + diff --git a/code/push/google/protobuf/__init__.py b/code/push/google/protobuf/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/code/push/google/protobuf/compiler/__init__.py b/code/push/google/protobuf/compiler/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/code/push/google/protobuf/compiler/plugin_pb2.py b/code/push/google/protobuf/compiler/plugin_pb2.py new file mode 100644 index 0000000..77cc07a --- /dev/null +++ b/code/push/google/protobuf/compiler/plugin_pb2.py @@ -0,0 +1,166 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/protobuf/compiler/plugin.proto + +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + + +import google.protobuf.descriptor_pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/protobuf/compiler/plugin.proto', + package='google.protobuf.compiler', + serialized_pb='\n%google/protobuf/compiler/plugin.proto\x12\x18google.protobuf.compiler\x1a google/protobuf/descriptor.proto\"}\n\x14\x43odeGeneratorRequest\x12\x18\n\x10\x66ile_to_generate\x18\x01 \x03(\t\x12\x11\n\tparameter\x18\x02 \x01(\t\x12\x38\n\nproto_file\x18\x0f \x03(\x0b\x32$.google.protobuf.FileDescriptorProto\"\xaa\x01\n\x15\x43odeGeneratorResponse\x12\r\n\x05\x65rror\x18\x01 \x01(\t\x12\x42\n\x04\x66ile\x18\x0f \x03(\x0b\x32\x34.google.protobuf.compiler.CodeGeneratorResponse.File\x1a>\n\x04\x46ile\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x17\n\x0finsertion_point\x18\x02 \x01(\t\x12\x0f\n\x07\x63ontent\x18\x0f \x01(\tB,\n\x1c\x63om.google.protobuf.compilerB\x0cPluginProtos') + + + + +_CODEGENERATORREQUEST = _descriptor.Descriptor( + name='CodeGeneratorRequest', + full_name='google.protobuf.compiler.CodeGeneratorRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='file_to_generate', full_name='google.protobuf.compiler.CodeGeneratorRequest.file_to_generate', index=0, + number=1, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='parameter', full_name='google.protobuf.compiler.CodeGeneratorRequest.parameter', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='proto_file', full_name='google.protobuf.compiler.CodeGeneratorRequest.proto_file', index=2, + number=15, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=101, + serialized_end=226, +) + + +_CODEGENERATORRESPONSE_FILE = _descriptor.Descriptor( + name='File', + full_name='google.protobuf.compiler.CodeGeneratorResponse.File', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='google.protobuf.compiler.CodeGeneratorResponse.File.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='insertion_point', full_name='google.protobuf.compiler.CodeGeneratorResponse.File.insertion_point', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='content', full_name='google.protobuf.compiler.CodeGeneratorResponse.File.content', index=2, + number=15, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=337, + serialized_end=399, +) + +_CODEGENERATORRESPONSE = _descriptor.Descriptor( + name='CodeGeneratorResponse', + full_name='google.protobuf.compiler.CodeGeneratorResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='error', full_name='google.protobuf.compiler.CodeGeneratorResponse.error', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='file', full_name='google.protobuf.compiler.CodeGeneratorResponse.file', index=1, + number=15, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_CODEGENERATORRESPONSE_FILE, ], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=229, + serialized_end=399, +) + +_CODEGENERATORREQUEST.fields_by_name['proto_file'].message_type = google.protobuf.descriptor_pb2._FILEDESCRIPTORPROTO +_CODEGENERATORRESPONSE_FILE.containing_type = _CODEGENERATORRESPONSE; +_CODEGENERATORRESPONSE.fields_by_name['file'].message_type = _CODEGENERATORRESPONSE_FILE +DESCRIPTOR.message_types_by_name['CodeGeneratorRequest'] = _CODEGENERATORREQUEST +DESCRIPTOR.message_types_by_name['CodeGeneratorResponse'] = _CODEGENERATORRESPONSE + +class CodeGeneratorRequest(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _CODEGENERATORREQUEST + + # @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorRequest) + +class CodeGeneratorResponse(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + + class File(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _CODEGENERATORRESPONSE_FILE + + # @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorResponse.File) + DESCRIPTOR = _CODEGENERATORRESPONSE + + # @@protoc_insertion_point(class_scope:google.protobuf.compiler.CodeGeneratorResponse) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), '\n\034com.google.protobuf.compilerB\014PluginProtos') +# @@protoc_insertion_point(module_scope) diff --git a/code/push/google/protobuf/descriptor.py b/code/push/google/protobuf/descriptor.py new file mode 100644 index 0000000..b6984d7 --- /dev/null +++ b/code/push/google/protobuf/descriptor.py @@ -0,0 +1,713 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Descriptors essentially contain exactly the information found in a .proto +file, in types that make this information accessible in Python. +""" + +__author__ = 'robinson@google.com (Will Robinson)' + + +from push.google.protobuf.internal import api_implementation + + +if api_implementation.Type() == 'cpp': + if api_implementation.Version() == 2: + from google.protobuf.internal.cpp import _message + else: + from google.protobuf.internal import cpp_message + + +class Error(Exception): + """Base error for this module.""" + + +class TypeTransformationError(Error): + """Error transforming between python proto type and corresponding C++ type.""" + + +class DescriptorBase(object): + + """Descriptors base class. + + This class is the base of all descriptor classes. It provides common options + related functionaility. + + Attributes: + has_options: True if the descriptor has non-default options. Usually it + is not necessary to read this -- just call GetOptions() which will + happily return the default instance. However, it's sometimes useful + for efficiency, and also useful inside the protobuf implementation to + avoid some bootstrapping issues. + """ + + def __init__(self, options, options_class_name): + """Initialize the descriptor given its options message and the name of the + class of the options message. The name of the class is required in case + the options message is None and has to be created. + """ + self._options = options + self._options_class_name = options_class_name + + # Does this descriptor have non-default options? + self.has_options = options is not None + + def _SetOptions(self, options, options_class_name): + """Sets the descriptor's options + + This function is used in generated proto2 files to update descriptor + options. It must not be used outside proto2. + """ + self._options = options + self._options_class_name = options_class_name + + # Does this descriptor have non-default options? + self.has_options = options is not None + + def GetOptions(self): + """Retrieves descriptor options. + + This method returns the options set or creates the default options for the + descriptor. + """ + if self._options: + return self._options + from google.protobuf import descriptor_pb2 + try: + options_class = getattr(descriptor_pb2, self._options_class_name) + except AttributeError: + raise RuntimeError('Unknown options class name %s!' % + (self._options_class_name)) + self._options = options_class() + return self._options + + +class _NestedDescriptorBase(DescriptorBase): + """Common class for descriptors that can be nested.""" + + def __init__(self, options, options_class_name, name, full_name, + file, containing_type, serialized_start=None, + serialized_end=None): + """Constructor. + + Args: + options: Protocol message options or None + to use default message options. + options_class_name: (str) The class name of the above options. + + name: (str) Name of this protocol message type. + full_name: (str) Fully-qualified name of this protocol message type, + which will include protocol "package" name and the name of any + enclosing types. + file: (FileDescriptor) Reference to file info. + containing_type: if provided, this is a nested descriptor, with this + descriptor as parent, otherwise None. + serialized_start: The start index (inclusive) in block in the + file.serialized_pb that describes this descriptor. + serialized_end: The end index (exclusive) in block in the + file.serialized_pb that describes this descriptor. + """ + super(_NestedDescriptorBase, self).__init__( + options, options_class_name) + + self.name = name + # TODO(falk): Add function to calculate full_name instead of having it in + # memory? + self.full_name = full_name + self.file = file + self.containing_type = containing_type + + self._serialized_start = serialized_start + self._serialized_end = serialized_end + + def GetTopLevelContainingType(self): + """Returns the root if this is a nested type, or itself if its the root.""" + desc = self + while desc.containing_type is not None: + desc = desc.containing_type + return desc + + def CopyToProto(self, proto): + """Copies this to the matching proto in descriptor_pb2. + + Args: + proto: An empty proto instance from descriptor_pb2. + + Raises: + Error: If self couldnt be serialized, due to to few constructor arguments. + """ + if (self.file is not None and + self._serialized_start is not None and + self._serialized_end is not None): + proto.ParseFromString(self.file.serialized_pb[ + self._serialized_start:self._serialized_end]) + else: + raise Error('Descriptor does not contain serialization.') + + +class Descriptor(_NestedDescriptorBase): + + """Descriptor for a protocol message type. + + A Descriptor instance has the following attributes: + + name: (str) Name of this protocol message type. + full_name: (str) Fully-qualified name of this protocol message type, + which will include protocol "package" name and the name of any + enclosing types. + + containing_type: (Descriptor) Reference to the descriptor of the + type containing us, or None if this is top-level. + + fields: (list of FieldDescriptors) Field descriptors for all + fields in this type. + fields_by_number: (dict int -> FieldDescriptor) Same FieldDescriptor + objects as in |fields|, but indexed by "number" attribute in each + FieldDescriptor. + fields_by_name: (dict str -> FieldDescriptor) Same FieldDescriptor + objects as in |fields|, but indexed by "name" attribute in each + FieldDescriptor. + + nested_types: (list of Descriptors) Descriptor references + for all protocol message types nested within this one. + nested_types_by_name: (dict str -> Descriptor) Same Descriptor + objects as in |nested_types|, but indexed by "name" attribute + in each Descriptor. + + enum_types: (list of EnumDescriptors) EnumDescriptor references + for all enums contained within this type. + enum_types_by_name: (dict str ->EnumDescriptor) Same EnumDescriptor + objects as in |enum_types|, but indexed by "name" attribute + in each EnumDescriptor. + enum_values_by_name: (dict str -> EnumValueDescriptor) Dict mapping + from enum value name to EnumValueDescriptor for that value. + + extensions: (list of FieldDescriptor) All extensions defined directly + within this message type (NOT within a nested type). + extensions_by_name: (dict, string -> FieldDescriptor) Same FieldDescriptor + objects as |extensions|, but indexed by "name" attribute of each + FieldDescriptor. + + is_extendable: Does this type define any extension ranges? + + options: (descriptor_pb2.MessageOptions) Protocol message options or None + to use default message options. + + file: (FileDescriptor) Reference to file descriptor. + """ + + def __init__(self, name, full_name, filename, containing_type, fields, + nested_types, enum_types, extensions, options=None, + is_extendable=True, extension_ranges=None, file=None, + serialized_start=None, serialized_end=None): + """Arguments to __init__() are as described in the description + of Descriptor fields above. + + Note that filename is an obsolete argument, that is not used anymore. + Please use file.name to access this as an attribute. + """ + super(Descriptor, self).__init__( + options, 'MessageOptions', name, full_name, file, + containing_type, serialized_start=serialized_start, + serialized_end=serialized_start) + + # We have fields in addition to fields_by_name and fields_by_number, + # so that: + # 1. Clients can index fields by "order in which they're listed." + # 2. Clients can easily iterate over all fields with the terse + # syntax: for f in descriptor.fields: ... + self.fields = fields + for field in self.fields: + field.containing_type = self + self.fields_by_number = dict((f.number, f) for f in fields) + self.fields_by_name = dict((f.name, f) for f in fields) + + self.nested_types = nested_types + self.nested_types_by_name = dict((t.name, t) for t in nested_types) + + self.enum_types = enum_types + for enum_type in self.enum_types: + enum_type.containing_type = self + self.enum_types_by_name = dict((t.name, t) for t in enum_types) + self.enum_values_by_name = dict( + (v.name, v) for t in enum_types for v in t.values) + + self.extensions = extensions + for extension in self.extensions: + extension.extension_scope = self + self.extensions_by_name = dict((f.name, f) for f in extensions) + self.is_extendable = is_extendable + self.extension_ranges = extension_ranges + + self._serialized_start = serialized_start + self._serialized_end = serialized_end + + def EnumValueName(self, enum, value): + """Returns the string name of an enum value. + + This is just a small helper method to simplify a common operation. + + Args: + enum: string name of the Enum. + value: int, value of the enum. + + Returns: + string name of the enum value. + + Raises: + KeyError if either the Enum doesn't exist or the value is not a valid + value for the enum. + """ + return self.enum_types_by_name[enum].values_by_number[value].name + + def CopyToProto(self, proto): + """Copies this to a descriptor_pb2.DescriptorProto. + + Args: + proto: An empty descriptor_pb2.DescriptorProto. + """ + # This function is overriden to give a better doc comment. + super(Descriptor, self).CopyToProto(proto) + + +# TODO(robinson): We should have aggressive checking here, +# for example: +# * If you specify a repeated field, you should not be allowed +# to specify a default value. +# * [Other examples here as needed]. +# +# TODO(robinson): for this and other *Descriptor classes, we +# might also want to lock things down aggressively (e.g., +# prevent clients from setting the attributes). Having +# stronger invariants here in general will reduce the number +# of runtime checks we must do in reflection.py... +class FieldDescriptor(DescriptorBase): + + """Descriptor for a single field in a .proto file. + + A FieldDescriptor instance has the following attributes: + + name: (str) Name of this field, exactly as it appears in .proto. + full_name: (str) Name of this field, including containing scope. This is + particularly relevant for extensions. + index: (int) Dense, 0-indexed index giving the order that this + field textually appears within its message in the .proto file. + number: (int) Tag number declared for this field in the .proto file. + + type: (One of the TYPE_* constants below) Declared type. + cpp_type: (One of the CPPTYPE_* constants below) C++ type used to + represent this field. + + label: (One of the LABEL_* constants below) Tells whether this + field is optional, required, or repeated. + has_default_value: (bool) True if this field has a default value defined, + otherwise false. + default_value: (Varies) Default value of this field. Only + meaningful for non-repeated scalar fields. Repeated fields + should always set this to [], and non-repeated composite + fields should always set this to None. + + containing_type: (Descriptor) Descriptor of the protocol message + type that contains this field. Set by the Descriptor constructor + if we're passed into one. + Somewhat confusingly, for extension fields, this is the + descriptor of the EXTENDED message, not the descriptor + of the message containing this field. (See is_extension and + extension_scope below). + message_type: (Descriptor) If a composite field, a descriptor + of the message type contained in this field. Otherwise, this is None. + enum_type: (EnumDescriptor) If this field contains an enum, a + descriptor of that enum. Otherwise, this is None. + + is_extension: True iff this describes an extension field. + extension_scope: (Descriptor) Only meaningful if is_extension is True. + Gives the message that immediately contains this extension field. + Will be None iff we're a top-level (file-level) extension field. + + options: (descriptor_pb2.FieldOptions) Protocol message field options or + None to use default field options. + """ + + # Must be consistent with C++ FieldDescriptor::Type enum in + # descriptor.h. + # + # TODO(robinson): Find a way to eliminate this repetition. + TYPE_DOUBLE = 1 + TYPE_FLOAT = 2 + TYPE_INT64 = 3 + TYPE_UINT64 = 4 + TYPE_INT32 = 5 + TYPE_FIXED64 = 6 + TYPE_FIXED32 = 7 + TYPE_BOOL = 8 + TYPE_STRING = 9 + TYPE_GROUP = 10 + TYPE_MESSAGE = 11 + TYPE_BYTES = 12 + TYPE_UINT32 = 13 + TYPE_ENUM = 14 + TYPE_SFIXED32 = 15 + TYPE_SFIXED64 = 16 + TYPE_SINT32 = 17 + TYPE_SINT64 = 18 + MAX_TYPE = 18 + + # Must be consistent with C++ FieldDescriptor::CppType enum in + # descriptor.h. + # + # TODO(robinson): Find a way to eliminate this repetition. + CPPTYPE_INT32 = 1 + CPPTYPE_INT64 = 2 + CPPTYPE_UINT32 = 3 + CPPTYPE_UINT64 = 4 + CPPTYPE_DOUBLE = 5 + CPPTYPE_FLOAT = 6 + CPPTYPE_BOOL = 7 + CPPTYPE_ENUM = 8 + CPPTYPE_STRING = 9 + CPPTYPE_MESSAGE = 10 + MAX_CPPTYPE = 10 + + _PYTHON_TO_CPP_PROTO_TYPE_MAP = { + TYPE_DOUBLE: CPPTYPE_DOUBLE, + TYPE_FLOAT: CPPTYPE_FLOAT, + TYPE_ENUM: CPPTYPE_ENUM, + TYPE_INT64: CPPTYPE_INT64, + TYPE_SINT64: CPPTYPE_INT64, + TYPE_SFIXED64: CPPTYPE_INT64, + TYPE_UINT64: CPPTYPE_UINT64, + TYPE_FIXED64: CPPTYPE_UINT64, + TYPE_INT32: CPPTYPE_INT32, + TYPE_SFIXED32: CPPTYPE_INT32, + TYPE_SINT32: CPPTYPE_INT32, + TYPE_UINT32: CPPTYPE_UINT32, + TYPE_FIXED32: CPPTYPE_UINT32, + TYPE_BYTES: CPPTYPE_STRING, + TYPE_STRING: CPPTYPE_STRING, + TYPE_BOOL: CPPTYPE_BOOL, + TYPE_MESSAGE: CPPTYPE_MESSAGE, + TYPE_GROUP: CPPTYPE_MESSAGE + } + + # Must be consistent with C++ FieldDescriptor::Label enum in + # descriptor.h. + # + # TODO(robinson): Find a way to eliminate this repetition. + LABEL_OPTIONAL = 1 + LABEL_REQUIRED = 2 + LABEL_REPEATED = 3 + MAX_LABEL = 3 + + def __init__(self, name, full_name, index, number, type, cpp_type, label, + default_value, message_type, enum_type, containing_type, + is_extension, extension_scope, options=None, + has_default_value=True): + """The arguments are as described in the description of FieldDescriptor + attributes above. + + Note that containing_type may be None, and may be set later if necessary + (to deal with circular references between message types, for example). + Likewise for extension_scope. + """ + super(FieldDescriptor, self).__init__(options, 'FieldOptions') + self.name = name + self.full_name = full_name + self.index = index + self.number = number + self.type = type + self.cpp_type = cpp_type + self.label = label + self.has_default_value = has_default_value + self.default_value = default_value + self.containing_type = containing_type + self.message_type = message_type + self.enum_type = enum_type + self.is_extension = is_extension + self.extension_scope = extension_scope + if api_implementation.Type() == 'cpp': + if is_extension: + if api_implementation.Version() == 2: + self._cdescriptor = _message.GetExtensionDescriptor(full_name) + else: + self._cdescriptor = cpp_message.GetExtensionDescriptor(full_name) + else: + if api_implementation.Version() == 2: + self._cdescriptor = _message.GetFieldDescriptor(full_name) + else: + self._cdescriptor = cpp_message.GetFieldDescriptor(full_name) + else: + self._cdescriptor = None + + @staticmethod + def ProtoTypeToCppProtoType(proto_type): + """Converts from a Python proto type to a C++ Proto Type. + + The Python ProtocolBuffer classes specify both the 'Python' datatype and the + 'C++' datatype - and they're not the same. This helper method should + translate from one to another. + + Args: + proto_type: the Python proto type (descriptor.FieldDescriptor.TYPE_*) + Returns: + descriptor.FieldDescriptor.CPPTYPE_*, the C++ type. + Raises: + TypeTransformationError: when the Python proto type isn't known. + """ + try: + return FieldDescriptor._PYTHON_TO_CPP_PROTO_TYPE_MAP[proto_type] + except KeyError: + raise TypeTransformationError('Unknown proto_type: %s' % proto_type) + + +class EnumDescriptor(_NestedDescriptorBase): + + """Descriptor for an enum defined in a .proto file. + + An EnumDescriptor instance has the following attributes: + + name: (str) Name of the enum type. + full_name: (str) Full name of the type, including package name + and any enclosing type(s). + + values: (list of EnumValueDescriptors) List of the values + in this enum. + values_by_name: (dict str -> EnumValueDescriptor) Same as |values|, + but indexed by the "name" field of each EnumValueDescriptor. + values_by_number: (dict int -> EnumValueDescriptor) Same as |values|, + but indexed by the "number" field of each EnumValueDescriptor. + containing_type: (Descriptor) Descriptor of the immediate containing + type of this enum, or None if this is an enum defined at the + top level in a .proto file. Set by Descriptor's constructor + if we're passed into one. + file: (FileDescriptor) Reference to file descriptor. + options: (descriptor_pb2.EnumOptions) Enum options message or + None to use default enum options. + """ + + def __init__(self, name, full_name, filename, values, + containing_type=None, options=None, file=None, + serialized_start=None, serialized_end=None): + """Arguments are as described in the attribute description above. + + Note that filename is an obsolete argument, that is not used anymore. + Please use file.name to access this as an attribute. + """ + super(EnumDescriptor, self).__init__( + options, 'EnumOptions', name, full_name, file, + containing_type, serialized_start=serialized_start, + serialized_end=serialized_start) + + self.values = values + for value in self.values: + value.type = self + self.values_by_name = dict((v.name, v) for v in values) + self.values_by_number = dict((v.number, v) for v in values) + + self._serialized_start = serialized_start + self._serialized_end = serialized_end + + def CopyToProto(self, proto): + """Copies this to a descriptor_pb2.EnumDescriptorProto. + + Args: + proto: An empty descriptor_pb2.EnumDescriptorProto. + """ + # This function is overriden to give a better doc comment. + super(EnumDescriptor, self).CopyToProto(proto) + + +class EnumValueDescriptor(DescriptorBase): + + """Descriptor for a single value within an enum. + + name: (str) Name of this value. + index: (int) Dense, 0-indexed index giving the order that this + value appears textually within its enum in the .proto file. + number: (int) Actual number assigned to this enum value. + type: (EnumDescriptor) EnumDescriptor to which this value + belongs. Set by EnumDescriptor's constructor if we're + passed into one. + options: (descriptor_pb2.EnumValueOptions) Enum value options message or + None to use default enum value options options. + """ + + def __init__(self, name, index, number, type=None, options=None): + """Arguments are as described in the attribute description above.""" + super(EnumValueDescriptor, self).__init__(options, 'EnumValueOptions') + self.name = name + self.index = index + self.number = number + self.type = type + + +class ServiceDescriptor(_NestedDescriptorBase): + + """Descriptor for a service. + + name: (str) Name of the service. + full_name: (str) Full name of the service, including package name. + index: (int) 0-indexed index giving the order that this services + definition appears withing the .proto file. + methods: (list of MethodDescriptor) List of methods provided by this + service. + options: (descriptor_pb2.ServiceOptions) Service options message or + None to use default service options. + file: (FileDescriptor) Reference to file info. + """ + + def __init__(self, name, full_name, index, methods, options=None, file=None, + serialized_start=None, serialized_end=None): + super(ServiceDescriptor, self).__init__( + options, 'ServiceOptions', name, full_name, file, + None, serialized_start=serialized_start, + serialized_end=serialized_end) + self.index = index + self.methods = methods + # Set the containing service for each method in this service. + for method in self.methods: + method.containing_service = self + + def FindMethodByName(self, name): + """Searches for the specified method, and returns its descriptor.""" + for method in self.methods: + if name == method.name: + return method + return None + + def CopyToProto(self, proto): + """Copies this to a descriptor_pb2.ServiceDescriptorProto. + + Args: + proto: An empty descriptor_pb2.ServiceDescriptorProto. + """ + # This function is overriden to give a better doc comment. + super(ServiceDescriptor, self).CopyToProto(proto) + + +class MethodDescriptor(DescriptorBase): + + """Descriptor for a method in a service. + + name: (str) Name of the method within the service. + full_name: (str) Full name of method. + index: (int) 0-indexed index of the method inside the service. + containing_service: (ServiceDescriptor) The service that contains this + method. + input_type: The descriptor of the message that this method accepts. + output_type: The descriptor of the message that this method returns. + options: (descriptor_pb2.MethodOptions) Method options message or + None to use default method options. + """ + + def __init__(self, name, full_name, index, containing_service, + input_type, output_type, options=None): + """The arguments are as described in the description of MethodDescriptor + attributes above. + + Note that containing_service may be None, and may be set later if necessary. + """ + super(MethodDescriptor, self).__init__(options, 'MethodOptions') + self.name = name + self.full_name = full_name + self.index = index + self.containing_service = containing_service + self.input_type = input_type + self.output_type = output_type + + +class FileDescriptor(DescriptorBase): + """Descriptor for a file. Mimics the descriptor_pb2.FileDescriptorProto. + + name: name of file, relative to root of source tree. + package: name of the package + serialized_pb: (str) Byte string of serialized + descriptor_pb2.FileDescriptorProto. + """ + + def __init__(self, name, package, options=None, serialized_pb=None): + """Constructor.""" + super(FileDescriptor, self).__init__(options, 'FileOptions') + + self.message_types_by_name = {} + self.name = name + self.package = package + self.serialized_pb = serialized_pb + if (api_implementation.Type() == 'cpp' and + self.serialized_pb is not None): + if api_implementation.Version() == 2: + _message.BuildFile(self.serialized_pb) + else: + cpp_message.BuildFile(self.serialized_pb) + + def CopyToProto(self, proto): + """Copies this to a descriptor_pb2.FileDescriptorProto. + + Args: + proto: An empty descriptor_pb2.FileDescriptorProto. + """ + proto.ParseFromString(self.serialized_pb) + + +def _ParseOptions(message, string): + """Parses serialized options. + + This helper function is used to parse serialized options in generated + proto2 files. It must not be used outside proto2. + """ + message.ParseFromString(string) + return message + + +def MakeDescriptor(desc_proto, package=''): + """Make a protobuf Descriptor given a DescriptorProto protobuf. + + Args: + desc_proto: The descriptor_pb2.DescriptorProto protobuf message. + package: Optional package name for the new message Descriptor (string). + + Returns: + A Descriptor for protobuf messages. + """ + full_message_name = [desc_proto.name] + if package: full_message_name.insert(0, package) + fields = [] + for field_proto in desc_proto.field: + full_name = '.'.join(full_message_name + [field_proto.name]) + field = FieldDescriptor( + field_proto.name, full_name, field_proto.number - 1, + field_proto.number, field_proto.type, + FieldDescriptor.ProtoTypeToCppProtoType(field_proto.type), + field_proto.label, None, None, None, None, False, None, + has_default_value=False) + fields.append(field) + + desc_name = '.'.join(full_message_name) + return Descriptor(desc_proto.name, desc_name, None, None, fields, + [], [], []) diff --git a/code/push/google/protobuf/descriptor_database.py b/code/push/google/protobuf/descriptor_database.py new file mode 100644 index 0000000..8665d3c --- /dev/null +++ b/code/push/google/protobuf/descriptor_database.py @@ -0,0 +1,120 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Provides a container for DescriptorProtos.""" + +__author__ = 'matthewtoia@google.com (Matt Toia)' + + +class DescriptorDatabase(object): + """A container accepting FileDescriptorProtos and maps DescriptorProtos.""" + + def __init__(self): + self._file_desc_protos_by_file = {} + self._file_desc_protos_by_symbol = {} + + def Add(self, file_desc_proto): + """Adds the FileDescriptorProto and its types to this database. + + Args: + file_desc_proto: The FileDescriptorProto to add. + """ + + self._file_desc_protos_by_file[file_desc_proto.name] = file_desc_proto + package = file_desc_proto.package + for message in file_desc_proto.message_type: + self._file_desc_protos_by_symbol.update( + (name, file_desc_proto) for name in _ExtractSymbols(message, package)) + for enum in file_desc_proto.enum_type: + self._file_desc_protos_by_symbol[ + '.'.join((package, enum.name))] = file_desc_proto + + def FindFileByName(self, name): + """Finds the file descriptor proto by file name. + + Typically the file name is a relative path ending to a .proto file. The + proto with the given name will have to have been added to this database + using the Add method or else an error will be raised. + + Args: + name: The file name to find. + + Returns: + The file descriptor proto matching the name. + + Raises: + KeyError if no file by the given name was added. + """ + + return self._file_desc_protos_by_file[name] + + def FindFileContainingSymbol(self, symbol): + """Finds the file descriptor proto containing the specified symbol. + + The symbol should be a fully qualified name including the file descriptor's + package and any containing messages. Some examples: + + 'some.package.name.Message' + 'some.package.name.Message.NestedEnum' + + The file descriptor proto containing the specified symbol must be added to + this database using the Add method or else an error will be raised. + + Args: + symbol: The fully qualified symbol name. + + Returns: + The file descriptor proto containing the symbol. + + Raises: + KeyError if no file contains the specified symbol. + """ + + return self._file_desc_protos_by_symbol[symbol] + + +def _ExtractSymbols(desc_proto, package): + """Pulls out all the symbols from a descriptor proto. + + Args: + desc_proto: The proto to extract symbols from. + package: The package containing the descriptor type. + + Yields: + The fully qualified name found in the descriptor. + """ + + message_name = '.'.join((package, desc_proto.name)) + yield message_name + for nested_type in desc_proto.nested_type: + for symbol in _ExtractSymbols(nested_type, message_name): + yield symbol + for enum_type in desc_proto.enum_type: + yield '.'.join((message_name, enum_type.name)) diff --git a/code/push/google/protobuf/descriptor_pb2.py b/code/push/google/protobuf/descriptor_pb2.py new file mode 100644 index 0000000..2b4d54c --- /dev/null +++ b/code/push/google/protobuf/descriptor_pb2.py @@ -0,0 +1,1346 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/protobuf/descriptor.proto + +from push.google.protobuf import descriptor as _descriptor +from push.google.protobuf import message as _message +from push.google.protobuf import reflection as _reflection +# @@protoc_insertion_point(imports) + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/protobuf/descriptor.proto', + package='google.protobuf', + serialized_pb='\n google/protobuf/descriptor.proto\x12\x0fgoogle.protobuf\"G\n\x11\x46ileDescriptorSet\x12\x32\n\x04\x66ile\x18\x01 \x03(\x0b\x32$.google.protobuf.FileDescriptorProto\"\xcb\x03\n\x13\x46ileDescriptorProto\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0f\n\x07package\x18\x02 \x01(\t\x12\x12\n\ndependency\x18\x03 \x03(\t\x12\x19\n\x11public_dependency\x18\n \x03(\x05\x12\x17\n\x0fweak_dependency\x18\x0b \x03(\x05\x12\x36\n\x0cmessage_type\x18\x04 \x03(\x0b\x32 .google.protobuf.DescriptorProto\x12\x37\n\tenum_type\x18\x05 \x03(\x0b\x32$.google.protobuf.EnumDescriptorProto\x12\x38\n\x07service\x18\x06 \x03(\x0b\x32\'.google.protobuf.ServiceDescriptorProto\x12\x38\n\textension\x18\x07 \x03(\x0b\x32%.google.protobuf.FieldDescriptorProto\x12-\n\x07options\x18\x08 \x01(\x0b\x32\x1c.google.protobuf.FileOptions\x12\x39\n\x10source_code_info\x18\t \x01(\x0b\x32\x1f.google.protobuf.SourceCodeInfo\"\xa9\x03\n\x0f\x44\x65scriptorProto\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x34\n\x05\x66ield\x18\x02 \x03(\x0b\x32%.google.protobuf.FieldDescriptorProto\x12\x38\n\textension\x18\x06 \x03(\x0b\x32%.google.protobuf.FieldDescriptorProto\x12\x35\n\x0bnested_type\x18\x03 \x03(\x0b\x32 .google.protobuf.DescriptorProto\x12\x37\n\tenum_type\x18\x04 \x03(\x0b\x32$.google.protobuf.EnumDescriptorProto\x12H\n\x0f\x65xtension_range\x18\x05 \x03(\x0b\x32/.google.protobuf.DescriptorProto.ExtensionRange\x12\x30\n\x07options\x18\x07 \x01(\x0b\x32\x1f.google.protobuf.MessageOptions\x1a,\n\x0e\x45xtensionRange\x12\r\n\x05start\x18\x01 \x01(\x05\x12\x0b\n\x03\x65nd\x18\x02 \x01(\x05\"\x94\x05\n\x14\x46ieldDescriptorProto\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06number\x18\x03 \x01(\x05\x12:\n\x05label\x18\x04 \x01(\x0e\x32+.google.protobuf.FieldDescriptorProto.Label\x12\x38\n\x04type\x18\x05 \x01(\x0e\x32*.google.protobuf.FieldDescriptorProto.Type\x12\x11\n\ttype_name\x18\x06 \x01(\t\x12\x10\n\x08\x65xtendee\x18\x02 \x01(\t\x12\x15\n\rdefault_value\x18\x07 \x01(\t\x12.\n\x07options\x18\x08 \x01(\x0b\x32\x1d.google.protobuf.FieldOptions\"\xb6\x02\n\x04Type\x12\x0f\n\x0bTYPE_DOUBLE\x10\x01\x12\x0e\n\nTYPE_FLOAT\x10\x02\x12\x0e\n\nTYPE_INT64\x10\x03\x12\x0f\n\x0bTYPE_UINT64\x10\x04\x12\x0e\n\nTYPE_INT32\x10\x05\x12\x10\n\x0cTYPE_FIXED64\x10\x06\x12\x10\n\x0cTYPE_FIXED32\x10\x07\x12\r\n\tTYPE_BOOL\x10\x08\x12\x0f\n\x0bTYPE_STRING\x10\t\x12\x0e\n\nTYPE_GROUP\x10\n\x12\x10\n\x0cTYPE_MESSAGE\x10\x0b\x12\x0e\n\nTYPE_BYTES\x10\x0c\x12\x0f\n\x0bTYPE_UINT32\x10\r\x12\r\n\tTYPE_ENUM\x10\x0e\x12\x11\n\rTYPE_SFIXED32\x10\x0f\x12\x11\n\rTYPE_SFIXED64\x10\x10\x12\x0f\n\x0bTYPE_SINT32\x10\x11\x12\x0f\n\x0bTYPE_SINT64\x10\x12\"C\n\x05Label\x12\x12\n\x0eLABEL_OPTIONAL\x10\x01\x12\x12\n\x0eLABEL_REQUIRED\x10\x02\x12\x12\n\x0eLABEL_REPEATED\x10\x03\"\x8c\x01\n\x13\x45numDescriptorProto\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x38\n\x05value\x18\x02 \x03(\x0b\x32).google.protobuf.EnumValueDescriptorProto\x12-\n\x07options\x18\x03 \x01(\x0b\x32\x1c.google.protobuf.EnumOptions\"l\n\x18\x45numValueDescriptorProto\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x0e\n\x06number\x18\x02 \x01(\x05\x12\x32\n\x07options\x18\x03 \x01(\x0b\x32!.google.protobuf.EnumValueOptions\"\x90\x01\n\x16ServiceDescriptorProto\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x36\n\x06method\x18\x02 \x03(\x0b\x32&.google.protobuf.MethodDescriptorProto\x12\x30\n\x07options\x18\x03 \x01(\x0b\x32\x1f.google.protobuf.ServiceOptions\"\x7f\n\x15MethodDescriptorProto\x12\x0c\n\x04name\x18\x01 \x01(\t\x12\x12\n\ninput_type\x18\x02 \x01(\t\x12\x13\n\x0boutput_type\x18\x03 \x01(\t\x12/\n\x07options\x18\x04 \x01(\x0b\x32\x1e.google.protobuf.MethodOptions\"\xe9\x03\n\x0b\x46ileOptions\x12\x14\n\x0cjava_package\x18\x01 \x01(\t\x12\x1c\n\x14java_outer_classname\x18\x08 \x01(\t\x12\"\n\x13java_multiple_files\x18\n \x01(\x08:\x05\x66\x61lse\x12,\n\x1djava_generate_equals_and_hash\x18\x14 \x01(\x08:\x05\x66\x61lse\x12\x46\n\x0coptimize_for\x18\t \x01(\x0e\x32).google.protobuf.FileOptions.OptimizeMode:\x05SPEED\x12\x12\n\ngo_package\x18\x0b \x01(\t\x12\"\n\x13\x63\x63_generic_services\x18\x10 \x01(\x08:\x05\x66\x61lse\x12$\n\x15java_generic_services\x18\x11 \x01(\x08:\x05\x66\x61lse\x12\"\n\x13py_generic_services\x18\x12 \x01(\x08:\x05\x66\x61lse\x12\x43\n\x14uninterpreted_option\x18\xe7\x07 \x03(\x0b\x32$.google.protobuf.UninterpretedOption\":\n\x0cOptimizeMode\x12\t\n\x05SPEED\x10\x01\x12\r\n\tCODE_SIZE\x10\x02\x12\x10\n\x0cLITE_RUNTIME\x10\x03*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\xb8\x01\n\x0eMessageOptions\x12&\n\x17message_set_wire_format\x18\x01 \x01(\x08:\x05\x66\x61lse\x12.\n\x1fno_standard_descriptor_accessor\x18\x02 \x01(\x08:\x05\x66\x61lse\x12\x43\n\x14uninterpreted_option\x18\xe7\x07 \x03(\x0b\x32$.google.protobuf.UninterpretedOption*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\xbe\x02\n\x0c\x46ieldOptions\x12:\n\x05\x63type\x18\x01 \x01(\x0e\x32#.google.protobuf.FieldOptions.CType:\x06STRING\x12\x0e\n\x06packed\x18\x02 \x01(\x08\x12\x13\n\x04lazy\x18\x05 \x01(\x08:\x05\x66\x61lse\x12\x19\n\ndeprecated\x18\x03 \x01(\x08:\x05\x66\x61lse\x12\x1c\n\x14\x65xperimental_map_key\x18\t \x01(\t\x12\x13\n\x04weak\x18\n \x01(\x08:\x05\x66\x61lse\x12\x43\n\x14uninterpreted_option\x18\xe7\x07 \x03(\x0b\x32$.google.protobuf.UninterpretedOption\"/\n\x05\x43Type\x12\n\n\x06STRING\x10\x00\x12\x08\n\x04\x43ORD\x10\x01\x12\x10\n\x0cSTRING_PIECE\x10\x02*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"x\n\x0b\x45numOptions\x12\x19\n\x0b\x61llow_alias\x18\x02 \x01(\x08:\x04true\x12\x43\n\x14uninterpreted_option\x18\xe7\x07 \x03(\x0b\x32$.google.protobuf.UninterpretedOption*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"b\n\x10\x45numValueOptions\x12\x43\n\x14uninterpreted_option\x18\xe7\x07 \x03(\x0b\x32$.google.protobuf.UninterpretedOption*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"`\n\x0eServiceOptions\x12\x43\n\x14uninterpreted_option\x18\xe7\x07 \x03(\x0b\x32$.google.protobuf.UninterpretedOption*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"_\n\rMethodOptions\x12\x43\n\x14uninterpreted_option\x18\xe7\x07 \x03(\x0b\x32$.google.protobuf.UninterpretedOption*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\"\x9e\x02\n\x13UninterpretedOption\x12;\n\x04name\x18\x02 \x03(\x0b\x32-.google.protobuf.UninterpretedOption.NamePart\x12\x18\n\x10identifier_value\x18\x03 \x01(\t\x12\x1a\n\x12positive_int_value\x18\x04 \x01(\x04\x12\x1a\n\x12negative_int_value\x18\x05 \x01(\x03\x12\x14\n\x0c\x64ouble_value\x18\x06 \x01(\x01\x12\x14\n\x0cstring_value\x18\x07 \x01(\x0c\x12\x17\n\x0f\x61ggregate_value\x18\x08 \x01(\t\x1a\x33\n\x08NamePart\x12\x11\n\tname_part\x18\x01 \x02(\t\x12\x14\n\x0cis_extension\x18\x02 \x02(\x08\"\xb1\x01\n\x0eSourceCodeInfo\x12:\n\x08location\x18\x01 \x03(\x0b\x32(.google.protobuf.SourceCodeInfo.Location\x1a\x63\n\x08Location\x12\x10\n\x04path\x18\x01 \x03(\x05\x42\x02\x10\x01\x12\x10\n\x04span\x18\x02 \x03(\x05\x42\x02\x10\x01\x12\x18\n\x10leading_comments\x18\x03 \x01(\t\x12\x19\n\x11trailing_comments\x18\x04 \x01(\tB)\n\x13\x63om.google.protobufB\x10\x44\x65scriptorProtosH\x01') + + + +_FIELDDESCRIPTORPROTO_TYPE = _descriptor.EnumDescriptor( + name='Type', + full_name='google.protobuf.FieldDescriptorProto.Type', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='TYPE_DOUBLE', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_FLOAT', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_INT64', index=2, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_UINT64', index=3, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_INT32', index=4, number=5, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_FIXED64', index=5, number=6, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_FIXED32', index=6, number=7, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_BOOL', index=7, number=8, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_STRING', index=8, number=9, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_GROUP', index=9, number=10, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_MESSAGE', index=10, number=11, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_BYTES', index=11, number=12, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_UINT32', index=12, number=13, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_ENUM', index=13, number=14, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_SFIXED32', index=14, number=15, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_SFIXED64', index=15, number=16, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_SINT32', index=16, number=17, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TYPE_SINT64', index=17, number=18, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=1298, + serialized_end=1608, +) + +_FIELDDESCRIPTORPROTO_LABEL = _descriptor.EnumDescriptor( + name='Label', + full_name='google.protobuf.FieldDescriptorProto.Label', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='LABEL_OPTIONAL', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LABEL_REQUIRED', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LABEL_REPEATED', index=2, number=3, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=1610, + serialized_end=1677, +) + +_FILEOPTIONS_OPTIMIZEMODE = _descriptor.EnumDescriptor( + name='OptimizeMode', + full_name='google.protobuf.FileOptions.OptimizeMode', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='SPEED', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CODE_SIZE', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='LITE_RUNTIME', index=2, number=3, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=2629, + serialized_end=2687, +) + +_FIELDOPTIONS_CTYPE = _descriptor.EnumDescriptor( + name='CType', + full_name='google.protobuf.FieldOptions.CType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='STRING', index=0, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='CORD', index=1, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='STRING_PIECE', index=2, number=2, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=3148, + serialized_end=3195, +) + + +_FILEDESCRIPTORSET = _descriptor.Descriptor( + name='FileDescriptorSet', + full_name='google.protobuf.FileDescriptorSet', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='file', full_name='google.protobuf.FileDescriptorSet.file', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=53, + serialized_end=124, +) + + +_FILEDESCRIPTORPROTO = _descriptor.Descriptor( + name='FileDescriptorProto', + full_name='google.protobuf.FileDescriptorProto', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='google.protobuf.FileDescriptorProto.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='package', full_name='google.protobuf.FileDescriptorProto.package', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dependency', full_name='google.protobuf.FileDescriptorProto.dependency', index=2, + number=3, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='public_dependency', full_name='google.protobuf.FileDescriptorProto.public_dependency', index=3, + number=10, type=5, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='weak_dependency', full_name='google.protobuf.FileDescriptorProto.weak_dependency', index=4, + number=11, type=5, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='message_type', full_name='google.protobuf.FileDescriptorProto.message_type', index=5, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='enum_type', full_name='google.protobuf.FileDescriptorProto.enum_type', index=6, + number=5, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='service', full_name='google.protobuf.FileDescriptorProto.service', index=7, + number=6, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='extension', full_name='google.protobuf.FileDescriptorProto.extension', index=8, + number=7, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='options', full_name='google.protobuf.FileDescriptorProto.options', index=9, + number=8, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='source_code_info', full_name='google.protobuf.FileDescriptorProto.source_code_info', index=10, + number=9, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=127, + serialized_end=586, +) + + +_DESCRIPTORPROTO_EXTENSIONRANGE = _descriptor.Descriptor( + name='ExtensionRange', + full_name='google.protobuf.DescriptorProto.ExtensionRange', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='start', full_name='google.protobuf.DescriptorProto.ExtensionRange.start', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='end', full_name='google.protobuf.DescriptorProto.ExtensionRange.end', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=970, + serialized_end=1014, +) + +_DESCRIPTORPROTO = _descriptor.Descriptor( + name='DescriptorProto', + full_name='google.protobuf.DescriptorProto', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='google.protobuf.DescriptorProto.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='field', full_name='google.protobuf.DescriptorProto.field', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='extension', full_name='google.protobuf.DescriptorProto.extension', index=2, + number=6, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='nested_type', full_name='google.protobuf.DescriptorProto.nested_type', index=3, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='enum_type', full_name='google.protobuf.DescriptorProto.enum_type', index=4, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='extension_range', full_name='google.protobuf.DescriptorProto.extension_range', index=5, + number=5, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='options', full_name='google.protobuf.DescriptorProto.options', index=6, + number=7, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_DESCRIPTORPROTO_EXTENSIONRANGE, ], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=589, + serialized_end=1014, +) + + +_FIELDDESCRIPTORPROTO = _descriptor.Descriptor( + name='FieldDescriptorProto', + full_name='google.protobuf.FieldDescriptorProto', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='google.protobuf.FieldDescriptorProto.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='number', full_name='google.protobuf.FieldDescriptorProto.number', index=1, + number=3, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='label', full_name='google.protobuf.FieldDescriptorProto.label', index=2, + number=4, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='type', full_name='google.protobuf.FieldDescriptorProto.type', index=3, + number=5, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='type_name', full_name='google.protobuf.FieldDescriptorProto.type_name', index=4, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='extendee', full_name='google.protobuf.FieldDescriptorProto.extendee', index=5, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_value', full_name='google.protobuf.FieldDescriptorProto.default_value', index=6, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='options', full_name='google.protobuf.FieldDescriptorProto.options', index=7, + number=8, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _FIELDDESCRIPTORPROTO_TYPE, + _FIELDDESCRIPTORPROTO_LABEL, + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1017, + serialized_end=1677, +) + + +_ENUMDESCRIPTORPROTO = _descriptor.Descriptor( + name='EnumDescriptorProto', + full_name='google.protobuf.EnumDescriptorProto', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='google.protobuf.EnumDescriptorProto.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='value', full_name='google.protobuf.EnumDescriptorProto.value', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='options', full_name='google.protobuf.EnumDescriptorProto.options', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1680, + serialized_end=1820, +) + + +_ENUMVALUEDESCRIPTORPROTO = _descriptor.Descriptor( + name='EnumValueDescriptorProto', + full_name='google.protobuf.EnumValueDescriptorProto', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='google.protobuf.EnumValueDescriptorProto.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='number', full_name='google.protobuf.EnumValueDescriptorProto.number', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='options', full_name='google.protobuf.EnumValueDescriptorProto.options', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1822, + serialized_end=1930, +) + + +_SERVICEDESCRIPTORPROTO = _descriptor.Descriptor( + name='ServiceDescriptorProto', + full_name='google.protobuf.ServiceDescriptorProto', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='google.protobuf.ServiceDescriptorProto.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='method', full_name='google.protobuf.ServiceDescriptorProto.method', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='options', full_name='google.protobuf.ServiceDescriptorProto.options', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1933, + serialized_end=2077, +) + + +_METHODDESCRIPTORPROTO = _descriptor.Descriptor( + name='MethodDescriptorProto', + full_name='google.protobuf.MethodDescriptorProto', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='google.protobuf.MethodDescriptorProto.name', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='input_type', full_name='google.protobuf.MethodDescriptorProto.input_type', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='output_type', full_name='google.protobuf.MethodDescriptorProto.output_type', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='options', full_name='google.protobuf.MethodDescriptorProto.options', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=2079, + serialized_end=2206, +) + + +_FILEOPTIONS = _descriptor.Descriptor( + name='FileOptions', + full_name='google.protobuf.FileOptions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='java_package', full_name='google.protobuf.FileOptions.java_package', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='java_outer_classname', full_name='google.protobuf.FileOptions.java_outer_classname', index=1, + number=8, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='java_multiple_files', full_name='google.protobuf.FileOptions.java_multiple_files', index=2, + number=10, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='java_generate_equals_and_hash', full_name='google.protobuf.FileOptions.java_generate_equals_and_hash', index=3, + number=20, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optimize_for', full_name='google.protobuf.FileOptions.optimize_for', index=4, + number=9, type=14, cpp_type=8, label=1, + has_default_value=True, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='go_package', full_name='google.protobuf.FileOptions.go_package', index=5, + number=11, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='cc_generic_services', full_name='google.protobuf.FileOptions.cc_generic_services', index=6, + number=16, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='java_generic_services', full_name='google.protobuf.FileOptions.java_generic_services', index=7, + number=17, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='py_generic_services', full_name='google.protobuf.FileOptions.py_generic_services', index=8, + number=18, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='uninterpreted_option', full_name='google.protobuf.FileOptions.uninterpreted_option', index=9, + number=999, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _FILEOPTIONS_OPTIMIZEMODE, + ], + options=None, + is_extendable=True, + extension_ranges=[(1000, 536870912), ], + serialized_start=2209, + serialized_end=2698, +) + + +_MESSAGEOPTIONS = _descriptor.Descriptor( + name='MessageOptions', + full_name='google.protobuf.MessageOptions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='message_set_wire_format', full_name='google.protobuf.MessageOptions.message_set_wire_format', index=0, + number=1, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='no_standard_descriptor_accessor', full_name='google.protobuf.MessageOptions.no_standard_descriptor_accessor', index=1, + number=2, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='uninterpreted_option', full_name='google.protobuf.MessageOptions.uninterpreted_option', index=2, + number=999, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(1000, 536870912), ], + serialized_start=2701, + serialized_end=2885, +) + + +_FIELDOPTIONS = _descriptor.Descriptor( + name='FieldOptions', + full_name='google.protobuf.FieldOptions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='ctype', full_name='google.protobuf.FieldOptions.ctype', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=True, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='packed', full_name='google.protobuf.FieldOptions.packed', index=1, + number=2, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='lazy', full_name='google.protobuf.FieldOptions.lazy', index=2, + number=5, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='deprecated', full_name='google.protobuf.FieldOptions.deprecated', index=3, + number=3, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='experimental_map_key', full_name='google.protobuf.FieldOptions.experimental_map_key', index=4, + number=9, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='weak', full_name='google.protobuf.FieldOptions.weak', index=5, + number=10, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='uninterpreted_option', full_name='google.protobuf.FieldOptions.uninterpreted_option', index=6, + number=999, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _FIELDOPTIONS_CTYPE, + ], + options=None, + is_extendable=True, + extension_ranges=[(1000, 536870912), ], + serialized_start=2888, + serialized_end=3206, +) + + +_ENUMOPTIONS = _descriptor.Descriptor( + name='EnumOptions', + full_name='google.protobuf.EnumOptions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='allow_alias', full_name='google.protobuf.EnumOptions.allow_alias', index=0, + number=2, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=True, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='uninterpreted_option', full_name='google.protobuf.EnumOptions.uninterpreted_option', index=1, + number=999, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(1000, 536870912), ], + serialized_start=3208, + serialized_end=3328, +) + + +_ENUMVALUEOPTIONS = _descriptor.Descriptor( + name='EnumValueOptions', + full_name='google.protobuf.EnumValueOptions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='uninterpreted_option', full_name='google.protobuf.EnumValueOptions.uninterpreted_option', index=0, + number=999, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(1000, 536870912), ], + serialized_start=3330, + serialized_end=3428, +) + + +_SERVICEOPTIONS = _descriptor.Descriptor( + name='ServiceOptions', + full_name='google.protobuf.ServiceOptions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='uninterpreted_option', full_name='google.protobuf.ServiceOptions.uninterpreted_option', index=0, + number=999, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(1000, 536870912), ], + serialized_start=3430, + serialized_end=3526, +) + + +_METHODOPTIONS = _descriptor.Descriptor( + name='MethodOptions', + full_name='google.protobuf.MethodOptions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='uninterpreted_option', full_name='google.protobuf.MethodOptions.uninterpreted_option', index=0, + number=999, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(1000, 536870912), ], + serialized_start=3528, + serialized_end=3623, +) + + +_UNINTERPRETEDOPTION_NAMEPART = _descriptor.Descriptor( + name='NamePart', + full_name='google.protobuf.UninterpretedOption.NamePart', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name_part', full_name='google.protobuf.UninterpretedOption.NamePart.name_part', index=0, + number=1, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='is_extension', full_name='google.protobuf.UninterpretedOption.NamePart.is_extension', index=1, + number=2, type=8, cpp_type=7, label=2, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=3861, + serialized_end=3912, +) + +_UNINTERPRETEDOPTION = _descriptor.Descriptor( + name='UninterpretedOption', + full_name='google.protobuf.UninterpretedOption', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='name', full_name='google.protobuf.UninterpretedOption.name', index=0, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='identifier_value', full_name='google.protobuf.UninterpretedOption.identifier_value', index=1, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='positive_int_value', full_name='google.protobuf.UninterpretedOption.positive_int_value', index=2, + number=4, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='negative_int_value', full_name='google.protobuf.UninterpretedOption.negative_int_value', index=3, + number=5, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='double_value', full_name='google.protobuf.UninterpretedOption.double_value', index=4, + number=6, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='string_value', full_name='google.protobuf.UninterpretedOption.string_value', index=5, + number=7, type=12, cpp_type=9, label=1, + has_default_value=False, default_value="", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='aggregate_value', full_name='google.protobuf.UninterpretedOption.aggregate_value', index=6, + number=8, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_UNINTERPRETEDOPTION_NAMEPART, ], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=3626, + serialized_end=3912, +) + + +_SOURCECODEINFO_LOCATION = _descriptor.Descriptor( + name='Location', + full_name='google.protobuf.SourceCodeInfo.Location', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='path', full_name='google.protobuf.SourceCodeInfo.Location.path', index=0, + number=1, type=5, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='span', full_name='google.protobuf.SourceCodeInfo.Location.span', index=1, + number=2, type=5, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='leading_comments', full_name='google.protobuf.SourceCodeInfo.Location.leading_comments', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='trailing_comments', full_name='google.protobuf.SourceCodeInfo.Location.trailing_comments', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=3993, + serialized_end=4092, +) + +_SOURCECODEINFO = _descriptor.Descriptor( + name='SourceCodeInfo', + full_name='google.protobuf.SourceCodeInfo', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='location', full_name='google.protobuf.SourceCodeInfo.location', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_SOURCECODEINFO_LOCATION, ], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=3915, + serialized_end=4092, +) + +_FILEDESCRIPTORSET.fields_by_name['file'].message_type = _FILEDESCRIPTORPROTO +_FILEDESCRIPTORPROTO.fields_by_name['message_type'].message_type = _DESCRIPTORPROTO +_FILEDESCRIPTORPROTO.fields_by_name['enum_type'].message_type = _ENUMDESCRIPTORPROTO +_FILEDESCRIPTORPROTO.fields_by_name['service'].message_type = _SERVICEDESCRIPTORPROTO +_FILEDESCRIPTORPROTO.fields_by_name['extension'].message_type = _FIELDDESCRIPTORPROTO +_FILEDESCRIPTORPROTO.fields_by_name['options'].message_type = _FILEOPTIONS +_FILEDESCRIPTORPROTO.fields_by_name['source_code_info'].message_type = _SOURCECODEINFO +_DESCRIPTORPROTO_EXTENSIONRANGE.containing_type = _DESCRIPTORPROTO; +_DESCRIPTORPROTO.fields_by_name['field'].message_type = _FIELDDESCRIPTORPROTO +_DESCRIPTORPROTO.fields_by_name['extension'].message_type = _FIELDDESCRIPTORPROTO +_DESCRIPTORPROTO.fields_by_name['nested_type'].message_type = _DESCRIPTORPROTO +_DESCRIPTORPROTO.fields_by_name['enum_type'].message_type = _ENUMDESCRIPTORPROTO +_DESCRIPTORPROTO.fields_by_name['extension_range'].message_type = _DESCRIPTORPROTO_EXTENSIONRANGE +_DESCRIPTORPROTO.fields_by_name['options'].message_type = _MESSAGEOPTIONS +_FIELDDESCRIPTORPROTO.fields_by_name['label'].enum_type = _FIELDDESCRIPTORPROTO_LABEL +_FIELDDESCRIPTORPROTO.fields_by_name['type'].enum_type = _FIELDDESCRIPTORPROTO_TYPE +_FIELDDESCRIPTORPROTO.fields_by_name['options'].message_type = _FIELDOPTIONS +_FIELDDESCRIPTORPROTO_TYPE.containing_type = _FIELDDESCRIPTORPROTO; +_FIELDDESCRIPTORPROTO_LABEL.containing_type = _FIELDDESCRIPTORPROTO; +_ENUMDESCRIPTORPROTO.fields_by_name['value'].message_type = _ENUMVALUEDESCRIPTORPROTO +_ENUMDESCRIPTORPROTO.fields_by_name['options'].message_type = _ENUMOPTIONS +_ENUMVALUEDESCRIPTORPROTO.fields_by_name['options'].message_type = _ENUMVALUEOPTIONS +_SERVICEDESCRIPTORPROTO.fields_by_name['method'].message_type = _METHODDESCRIPTORPROTO +_SERVICEDESCRIPTORPROTO.fields_by_name['options'].message_type = _SERVICEOPTIONS +_METHODDESCRIPTORPROTO.fields_by_name['options'].message_type = _METHODOPTIONS +_FILEOPTIONS.fields_by_name['optimize_for'].enum_type = _FILEOPTIONS_OPTIMIZEMODE +_FILEOPTIONS.fields_by_name['uninterpreted_option'].message_type = _UNINTERPRETEDOPTION +_FILEOPTIONS_OPTIMIZEMODE.containing_type = _FILEOPTIONS; +_MESSAGEOPTIONS.fields_by_name['uninterpreted_option'].message_type = _UNINTERPRETEDOPTION +_FIELDOPTIONS.fields_by_name['ctype'].enum_type = _FIELDOPTIONS_CTYPE +_FIELDOPTIONS.fields_by_name['uninterpreted_option'].message_type = _UNINTERPRETEDOPTION +_FIELDOPTIONS_CTYPE.containing_type = _FIELDOPTIONS; +_ENUMOPTIONS.fields_by_name['uninterpreted_option'].message_type = _UNINTERPRETEDOPTION +_ENUMVALUEOPTIONS.fields_by_name['uninterpreted_option'].message_type = _UNINTERPRETEDOPTION +_SERVICEOPTIONS.fields_by_name['uninterpreted_option'].message_type = _UNINTERPRETEDOPTION +_METHODOPTIONS.fields_by_name['uninterpreted_option'].message_type = _UNINTERPRETEDOPTION +_UNINTERPRETEDOPTION_NAMEPART.containing_type = _UNINTERPRETEDOPTION; +_UNINTERPRETEDOPTION.fields_by_name['name'].message_type = _UNINTERPRETEDOPTION_NAMEPART +_SOURCECODEINFO_LOCATION.containing_type = _SOURCECODEINFO; +_SOURCECODEINFO.fields_by_name['location'].message_type = _SOURCECODEINFO_LOCATION +DESCRIPTOR.message_types_by_name['FileDescriptorSet'] = _FILEDESCRIPTORSET +DESCRIPTOR.message_types_by_name['FileDescriptorProto'] = _FILEDESCRIPTORPROTO +DESCRIPTOR.message_types_by_name['DescriptorProto'] = _DESCRIPTORPROTO +DESCRIPTOR.message_types_by_name['FieldDescriptorProto'] = _FIELDDESCRIPTORPROTO +DESCRIPTOR.message_types_by_name['EnumDescriptorProto'] = _ENUMDESCRIPTORPROTO +DESCRIPTOR.message_types_by_name['EnumValueDescriptorProto'] = _ENUMVALUEDESCRIPTORPROTO +DESCRIPTOR.message_types_by_name['ServiceDescriptorProto'] = _SERVICEDESCRIPTORPROTO +DESCRIPTOR.message_types_by_name['MethodDescriptorProto'] = _METHODDESCRIPTORPROTO +DESCRIPTOR.message_types_by_name['FileOptions'] = _FILEOPTIONS +DESCRIPTOR.message_types_by_name['MessageOptions'] = _MESSAGEOPTIONS +DESCRIPTOR.message_types_by_name['FieldOptions'] = _FIELDOPTIONS +DESCRIPTOR.message_types_by_name['EnumOptions'] = _ENUMOPTIONS +DESCRIPTOR.message_types_by_name['EnumValueOptions'] = _ENUMVALUEOPTIONS +DESCRIPTOR.message_types_by_name['ServiceOptions'] = _SERVICEOPTIONS +DESCRIPTOR.message_types_by_name['MethodOptions'] = _METHODOPTIONS +DESCRIPTOR.message_types_by_name['UninterpretedOption'] = _UNINTERPRETEDOPTION +DESCRIPTOR.message_types_by_name['SourceCodeInfo'] = _SOURCECODEINFO + +class FileDescriptorSet(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _FILEDESCRIPTORSET + + # @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorSet) + +class FileDescriptorProto(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _FILEDESCRIPTORPROTO + + # @@protoc_insertion_point(class_scope:google.protobuf.FileDescriptorProto) + +class DescriptorProto(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + + class ExtensionRange(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _DESCRIPTORPROTO_EXTENSIONRANGE + + # @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto.ExtensionRange) + DESCRIPTOR = _DESCRIPTORPROTO + + # @@protoc_insertion_point(class_scope:google.protobuf.DescriptorProto) + +class FieldDescriptorProto(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _FIELDDESCRIPTORPROTO + + # @@protoc_insertion_point(class_scope:google.protobuf.FieldDescriptorProto) + +class EnumDescriptorProto(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _ENUMDESCRIPTORPROTO + + # @@protoc_insertion_point(class_scope:google.protobuf.EnumDescriptorProto) + +class EnumValueDescriptorProto(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _ENUMVALUEDESCRIPTORPROTO + + # @@protoc_insertion_point(class_scope:google.protobuf.EnumValueDescriptorProto) + +class ServiceDescriptorProto(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _SERVICEDESCRIPTORPROTO + + # @@protoc_insertion_point(class_scope:google.protobuf.ServiceDescriptorProto) + +class MethodDescriptorProto(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _METHODDESCRIPTORPROTO + + # @@protoc_insertion_point(class_scope:google.protobuf.MethodDescriptorProto) + +class FileOptions(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _FILEOPTIONS + + # @@protoc_insertion_point(class_scope:google.protobuf.FileOptions) + +class MessageOptions(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _MESSAGEOPTIONS + + # @@protoc_insertion_point(class_scope:google.protobuf.MessageOptions) + +class FieldOptions(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _FIELDOPTIONS + + # @@protoc_insertion_point(class_scope:google.protobuf.FieldOptions) + +class EnumOptions(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _ENUMOPTIONS + + # @@protoc_insertion_point(class_scope:google.protobuf.EnumOptions) + +class EnumValueOptions(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _ENUMVALUEOPTIONS + + # @@protoc_insertion_point(class_scope:google.protobuf.EnumValueOptions) + +class ServiceOptions(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _SERVICEOPTIONS + + # @@protoc_insertion_point(class_scope:google.protobuf.ServiceOptions) + +class MethodOptions(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _METHODOPTIONS + + # @@protoc_insertion_point(class_scope:google.protobuf.MethodOptions) + +class UninterpretedOption(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + + class NamePart(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _UNINTERPRETEDOPTION_NAMEPART + + # @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption.NamePart) + DESCRIPTOR = _UNINTERPRETEDOPTION + + # @@protoc_insertion_point(class_scope:google.protobuf.UninterpretedOption) + +class SourceCodeInfo(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + + class Location(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _SOURCECODEINFO_LOCATION + + # @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo.Location) + DESCRIPTOR = _SOURCECODEINFO + + # @@protoc_insertion_point(class_scope:google.protobuf.SourceCodeInfo) + + +# @@protoc_insertion_point(module_scope) diff --git a/code/push/google/protobuf/descriptor_pool.py b/code/push/google/protobuf/descriptor_pool.py new file mode 100644 index 0000000..8f1f445 --- /dev/null +++ b/code/push/google/protobuf/descriptor_pool.py @@ -0,0 +1,527 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Provides DescriptorPool to use as a container for proto2 descriptors. + +The DescriptorPool is used in conjection with a DescriptorDatabase to maintain +a collection of protocol buffer descriptors for use when dynamically creating +message types at runtime. + +For most applications protocol buffers should be used via modules generated by +the protocol buffer compiler tool. This should only be used when the type of +protocol buffers used in an application or library cannot be predetermined. + +Below is a straightforward example on how to use this class: + + pool = DescriptorPool() + file_descriptor_protos = [ ... ] + for file_descriptor_proto in file_descriptor_protos: + pool.Add(file_descriptor_proto) + my_message_descriptor = pool.FindMessageTypeByName('some.package.MessageType') + +The message descriptor can be used in conjunction with the message_factory +module in order to create a protocol buffer class that can be encoded and +decoded. +""" + +__author__ = 'matthewtoia@google.com (Matt Toia)' + +from google.protobuf import descriptor_pb2 +from google.protobuf import descriptor +from google.protobuf import descriptor_database + + +class DescriptorPool(object): + """A collection of protobufs dynamically constructed by descriptor protos.""" + + def __init__(self, descriptor_db=None): + """Initializes a Pool of proto buffs. + + The descriptor_db argument to the constructor is provided to allow + specialized file descriptor proto lookup code to be triggered on demand. An + example would be an implementation which will read and compile a file + specified in a call to FindFileByName() and not require the call to Add() + at all. Results from this database will be cached internally here as well. + + Args: + descriptor_db: A secondary source of file descriptors. + """ + + self._internal_db = descriptor_database.DescriptorDatabase() + self._descriptor_db = descriptor_db + self._descriptors = {} + self._enum_descriptors = {} + self._file_descriptors = {} + + def Add(self, file_desc_proto): + """Adds the FileDescriptorProto and its types to this pool. + + Args: + file_desc_proto: The FileDescriptorProto to add. + """ + + self._internal_db.Add(file_desc_proto) + + def FindFileByName(self, file_name): + """Gets a FileDescriptor by file name. + + Args: + file_name: The path to the file to get a descriptor for. + + Returns: + A FileDescriptor for the named file. + + Raises: + KeyError: if the file can not be found in the pool. + """ + + try: + file_proto = self._internal_db.FindFileByName(file_name) + except KeyError as error: + if self._descriptor_db: + file_proto = self._descriptor_db.FindFileByName(file_name) + else: + raise error + if not file_proto: + raise KeyError('Cannot find a file named %s' % file_name) + return self._ConvertFileProtoToFileDescriptor(file_proto) + + def FindFileContainingSymbol(self, symbol): + """Gets the FileDescriptor for the file containing the specified symbol. + + Args: + symbol: The name of the symbol to search for. + + Returns: + A FileDescriptor that contains the specified symbol. + + Raises: + KeyError: if the file can not be found in the pool. + """ + + try: + file_proto = self._internal_db.FindFileContainingSymbol(symbol) + except KeyError as error: + if self._descriptor_db: + file_proto = self._descriptor_db.FindFileContainingSymbol(symbol) + else: + raise error + if not file_proto: + raise KeyError('Cannot find a file containing %s' % symbol) + return self._ConvertFileProtoToFileDescriptor(file_proto) + + def FindMessageTypeByName(self, full_name): + """Loads the named descriptor from the pool. + + Args: + full_name: The full name of the descriptor to load. + + Returns: + The descriptor for the named type. + """ + + full_name = full_name.lstrip('.') # fix inconsistent qualified name formats + if full_name not in self._descriptors: + self.FindFileContainingSymbol(full_name) + return self._descriptors[full_name] + + def FindEnumTypeByName(self, full_name): + """Loads the named enum descriptor from the pool. + + Args: + full_name: The full name of the enum descriptor to load. + + Returns: + The enum descriptor for the named type. + """ + + full_name = full_name.lstrip('.') # fix inconsistent qualified name formats + if full_name not in self._enum_descriptors: + self.FindFileContainingSymbol(full_name) + return self._enum_descriptors[full_name] + + def _ConvertFileProtoToFileDescriptor(self, file_proto): + """Creates a FileDescriptor from a proto or returns a cached copy. + + This method also has the side effect of loading all the symbols found in + the file into the appropriate dictionaries in the pool. + + Args: + file_proto: The proto to convert. + + Returns: + A FileDescriptor matching the passed in proto. + """ + + if file_proto.name not in self._file_descriptors: + file_descriptor = descriptor.FileDescriptor( + name=file_proto.name, + package=file_proto.package, + options=file_proto.options, + serialized_pb=file_proto.SerializeToString()) + scope = {} + dependencies = list(self._GetDeps(file_proto)) + + for dependency in dependencies: + dep_desc = self.FindFileByName(dependency.name) + dep_proto = descriptor_pb2.FileDescriptorProto.FromString( + dep_desc.serialized_pb) + package = '.' + dep_proto.package + package_prefix = package + '.' + + def _strip_package(symbol): + if symbol.startswith(package_prefix): + return symbol[len(package_prefix):] + return symbol + + symbols = list(self._ExtractSymbols(dep_proto.message_type, package)) + scope.update(symbols) + scope.update((_strip_package(k), v) for k, v in symbols) + + symbols = list(self._ExtractEnums(dep_proto.enum_type, package)) + scope.update(symbols) + scope.update((_strip_package(k), v) for k, v in symbols) + + for message_type in file_proto.message_type: + message_desc = self._ConvertMessageDescriptor( + message_type, file_proto.package, file_descriptor, scope) + file_descriptor.message_types_by_name[message_desc.name] = message_desc + for enum_type in file_proto.enum_type: + self._ConvertEnumDescriptor(enum_type, file_proto.package, + file_descriptor, None, scope) + for desc_proto in self._ExtractMessages(file_proto.message_type): + self._SetFieldTypes(desc_proto, scope) + + for desc_proto in file_proto.message_type: + desc = scope[desc_proto.name] + file_descriptor.message_types_by_name[desc_proto.name] = desc + self.Add(file_proto) + self._file_descriptors[file_proto.name] = file_descriptor + + return self._file_descriptors[file_proto.name] + + def _ConvertMessageDescriptor(self, desc_proto, package=None, file_desc=None, + scope=None): + """Adds the proto to the pool in the specified package. + + Args: + desc_proto: The descriptor_pb2.DescriptorProto protobuf message. + package: The package the proto should be located in. + file_desc: The file containing this message. + scope: Dict mapping short and full symbols to message and enum types. + + Returns: + The added descriptor. + """ + + if package: + desc_name = '.'.join((package, desc_proto.name)) + else: + desc_name = desc_proto.name + + if file_desc is None: + file_name = None + else: + file_name = file_desc.name + + if scope is None: + scope = {} + + nested = [ + self._ConvertMessageDescriptor(nested, desc_name, file_desc, scope) + for nested in desc_proto.nested_type] + enums = [ + self._ConvertEnumDescriptor(enum, desc_name, file_desc, None, scope) + for enum in desc_proto.enum_type] + fields = [self._MakeFieldDescriptor(field, desc_name, index) + for index, field in enumerate(desc_proto.field)] + extensions = [self._MakeFieldDescriptor(extension, desc_name, True) + for index, extension in enumerate(desc_proto.extension)] + extension_ranges = [(r.start, r.end) for r in desc_proto.extension_range] + if extension_ranges: + is_extendable = True + else: + is_extendable = False + desc = descriptor.Descriptor( + name=desc_proto.name, + full_name=desc_name, + filename=file_name, + containing_type=None, + fields=fields, + nested_types=nested, + enum_types=enums, + extensions=extensions, + options=desc_proto.options, + is_extendable=is_extendable, + extension_ranges=extension_ranges, + file=file_desc, + serialized_start=None, + serialized_end=None) + for nested in desc.nested_types: + nested.containing_type = desc + for enum in desc.enum_types: + enum.containing_type = desc + scope[desc_proto.name] = desc + scope['.' + desc_name] = desc + self._descriptors[desc_name] = desc + return desc + + def _ConvertEnumDescriptor(self, enum_proto, package=None, file_desc=None, + containing_type=None, scope=None): + """Make a protobuf EnumDescriptor given an EnumDescriptorProto protobuf. + + Args: + enum_proto: The descriptor_pb2.EnumDescriptorProto protobuf message. + package: Optional package name for the new message EnumDescriptor. + file_desc: The file containing the enum descriptor. + containing_type: The type containing this enum. + scope: Scope containing available types. + + Returns: + The added descriptor + """ + + if package: + enum_name = '.'.join((package, enum_proto.name)) + else: + enum_name = enum_proto.name + + if file_desc is None: + file_name = None + else: + file_name = file_desc.name + + values = [self._MakeEnumValueDescriptor(value, index) + for index, value in enumerate(enum_proto.value)] + desc = descriptor.EnumDescriptor(name=enum_proto.name, + full_name=enum_name, + filename=file_name, + file=file_desc, + values=values, + containing_type=containing_type, + options=enum_proto.options) + scope[enum_proto.name] = desc + scope['.%s' % enum_name] = desc + self._enum_descriptors[enum_name] = desc + return desc + + def _MakeFieldDescriptor(self, field_proto, message_name, index, + is_extension=False): + """Creates a field descriptor from a FieldDescriptorProto. + + For message and enum type fields, this method will do a look up + in the pool for the appropriate descriptor for that type. If it + is unavailable, it will fall back to the _source function to + create it. If this type is still unavailable, construction will + fail. + + Args: + field_proto: The proto describing the field. + message_name: The name of the containing message. + index: Index of the field + is_extension: Indication that this field is for an extension. + + Returns: + An initialized FieldDescriptor object + """ + + if message_name: + full_name = '.'.join((message_name, field_proto.name)) + else: + full_name = field_proto.name + + return descriptor.FieldDescriptor( + name=field_proto.name, + full_name=full_name, + index=index, + number=field_proto.number, + type=field_proto.type, + cpp_type=None, + message_type=None, + enum_type=None, + containing_type=None, + label=field_proto.label, + has_default_value=False, + default_value=None, + is_extension=is_extension, + extension_scope=None, + options=field_proto.options) + + def _SetFieldTypes(self, desc_proto, scope): + """Sets the field's type, cpp_type, message_type and enum_type. + + Args: + desc_proto: The message descriptor to update. + scope: Enclosing scope of available types. + """ + + desc = scope[desc_proto.name] + for field_proto, field_desc in zip(desc_proto.field, desc.fields): + if field_proto.type_name: + type_name = field_proto.type_name + if type_name not in scope: + type_name = '.' + type_name + desc = scope[type_name] + else: + desc = None + + if not field_proto.HasField('type'): + if isinstance(desc, descriptor.Descriptor): + field_proto.type = descriptor.FieldDescriptor.TYPE_MESSAGE + else: + field_proto.type = descriptor.FieldDescriptor.TYPE_ENUM + + field_desc.cpp_type = descriptor.FieldDescriptor.ProtoTypeToCppProtoType( + field_proto.type) + + if (field_proto.type == descriptor.FieldDescriptor.TYPE_MESSAGE + or field_proto.type == descriptor.FieldDescriptor.TYPE_GROUP): + field_desc.message_type = desc + + if field_proto.type == descriptor.FieldDescriptor.TYPE_ENUM: + field_desc.enum_type = desc + + if field_proto.label == descriptor.FieldDescriptor.LABEL_REPEATED: + field_desc.has_default = False + field_desc.default_value = [] + elif field_proto.HasField('default_value'): + field_desc.has_default = True + if (field_proto.type == descriptor.FieldDescriptor.TYPE_DOUBLE or + field_proto.type == descriptor.FieldDescriptor.TYPE_FLOAT): + field_desc.default_value = float(field_proto.default_value) + elif field_proto.type == descriptor.FieldDescriptor.TYPE_STRING: + field_desc.default_value = field_proto.default_value + elif field_proto.type == descriptor.FieldDescriptor.TYPE_BOOL: + field_desc.default_value = field_proto.default_value.lower() == 'true' + elif field_proto.type == descriptor.FieldDescriptor.TYPE_ENUM: + field_desc.default_value = field_desc.enum_type.values_by_name[ + field_proto.default_value].index + else: + field_desc.default_value = int(field_proto.default_value) + else: + field_desc.has_default = False + field_desc.default_value = None + + field_desc.type = field_proto.type + + for nested_type in desc_proto.nested_type: + self._SetFieldTypes(nested_type, scope) + + def _MakeEnumValueDescriptor(self, value_proto, index): + """Creates a enum value descriptor object from a enum value proto. + + Args: + value_proto: The proto describing the enum value. + index: The index of the enum value. + + Returns: + An initialized EnumValueDescriptor object. + """ + + return descriptor.EnumValueDescriptor( + name=value_proto.name, + index=index, + number=value_proto.number, + options=value_proto.options, + type=None) + + def _ExtractSymbols(self, desc_protos, package): + """Pulls out all the symbols from descriptor protos. + + Args: + desc_protos: The protos to extract symbols from. + package: The package containing the descriptor type. + Yields: + A two element tuple of the type name and descriptor object. + """ + + for desc_proto in desc_protos: + if package: + message_name = '.'.join((package, desc_proto.name)) + else: + message_name = desc_proto.name + message_desc = self.FindMessageTypeByName(message_name) + yield (message_name, message_desc) + for symbol in self._ExtractSymbols(desc_proto.nested_type, message_name): + yield symbol + for symbol in self._ExtractEnums(desc_proto.enum_type, message_name): + yield symbol + + def _ExtractEnums(self, enum_protos, package): + """Pulls out all the symbols from enum protos. + + Args: + enum_protos: The protos to extract symbols from. + package: The package containing the enum type. + + Yields: + A two element tuple of the type name and enum descriptor object. + """ + + for enum_proto in enum_protos: + if package: + enum_name = '.'.join((package, enum_proto.name)) + else: + enum_name = enum_proto.name + enum_desc = self.FindEnumTypeByName(enum_name) + yield (enum_name, enum_desc) + + def _ExtractMessages(self, desc_protos): + """Pulls out all the message protos from descriptos. + + Args: + desc_protos: The protos to extract symbols from. + + Yields: + Descriptor protos. + """ + + for desc_proto in desc_protos: + yield desc_proto + for message in self._ExtractMessages(desc_proto.nested_type): + yield message + + def _GetDeps(self, file_proto): + """Recursively finds dependencies for file protos. + + Args: + file_proto: The proto to get dependencies from. + + Yields: + Each direct and indirect dependency. + """ + + for dependency in file_proto.dependency: + dep_desc = self.FindFileByName(dependency) + dep_proto = descriptor_pb2.FileDescriptorProto.FromString( + dep_desc.serialized_pb) + yield dep_proto + for parent_dep in self._GetDeps(dep_proto): + yield parent_dep diff --git a/code/push/google/protobuf/internal/__init__.py b/code/push/google/protobuf/internal/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/code/push/google/protobuf/internal/api_implementation.py b/code/push/google/protobuf/internal/api_implementation.py new file mode 100644 index 0000000..ce02a32 --- /dev/null +++ b/code/push/google/protobuf/internal/api_implementation.py @@ -0,0 +1,87 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +""" +This module is the central entity that determines which implementation of the +API is used. +""" + +__author__ = 'petar@google.com (Petar Petrov)' + +import os +# This environment variable can be used to switch to a certain implementation +# of the Python API. Right now only 'python' and 'cpp' are valid values. Any +# other value will be ignored. +_implementation_type = os.getenv('PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION', + 'python') + + +if _implementation_type != 'python': + # For now, by default use the pure-Python implementation. + # The code below checks if the C extension is available and + # uses it if it is available. + _implementation_type = 'cpp' + ## Determine automatically which implementation to use. + #try: + # from google.protobuf.internal import cpp_message + # _implementation_type = 'cpp' + #except ImportError, e: + # _implementation_type = 'python' + + +# This environment variable can be used to switch between the two +# 'cpp' implementations. Right now only 1 and 2 are valid values. Any +# other value will be ignored. +_implementation_version_str = os.getenv( + 'PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION', + '1') + + +if _implementation_version_str not in ('1', '2'): + raise ValueError( + "unsupported PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION_VERSION: '" + + _implementation_version_str + "' (supported versions: 1, 2)" + ) + + +_implementation_version = int(_implementation_version_str) + + + +# Usage of this function is discouraged. Clients shouldn't care which +# implementation of the API is in use. Note that there is no guarantee +# that differences between APIs will be maintained. +# Please don't use this function if possible. +def Type(): + return _implementation_type + +# See comment on 'Type' above. +def Version(): + return _implementation_version diff --git a/code/push/google/protobuf/internal/containers.py b/code/push/google/protobuf/internal/containers.py new file mode 100644 index 0000000..34b35f8 --- /dev/null +++ b/code/push/google/protobuf/internal/containers.py @@ -0,0 +1,269 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Contains container classes to represent different protocol buffer types. + +This file defines container classes which represent categories of protocol +buffer field types which need extra maintenance. Currently these categories +are: + - Repeated scalar fields - These are all repeated fields which aren't + composite (e.g. they are of simple types like int32, string, etc). + - Repeated composite fields - Repeated fields which are composite. This + includes groups and nested messages. +""" + +__author__ = 'petar@google.com (Petar Petrov)' + + +class BaseContainer(object): + + """Base container class.""" + + # Minimizes memory usage and disallows assignment to other attributes. + __slots__ = ['_message_listener', '_values'] + + def __init__(self, message_listener): + """ + Args: + message_listener: A MessageListener implementation. + The RepeatedScalarFieldContainer will call this object's + Modified() method when it is modified. + """ + self._message_listener = message_listener + self._values = [] + + def __getitem__(self, key): + """Retrieves item by the specified key.""" + return self._values[key] + + def __len__(self): + """Returns the number of elements in the container.""" + return len(self._values) + + def __ne__(self, other): + """Checks if another instance isn't equal to this one.""" + # The concrete classes should define __eq__. + return not self == other + + def __hash__(self): + raise TypeError('unhashable object') + + def __repr__(self): + return repr(self._values) + + def sort(self, *args, **kwargs): + # Continue to support the old sort_function keyword argument. + # This is expected to be a rare occurrence, so use LBYL to avoid + # the overhead of actually catching KeyError. + if 'sort_function' in kwargs: + kwargs['cmp'] = kwargs.pop('sort_function') + self._values.sort(*args, **kwargs) + + +class RepeatedScalarFieldContainer(BaseContainer): + + """Simple, type-checked, list-like container for holding repeated scalars.""" + + # Disallows assignment to other attributes. + __slots__ = ['_type_checker'] + + def __init__(self, message_listener, type_checker): + """ + Args: + message_listener: A MessageListener implementation. + The RepeatedScalarFieldContainer will call this object's + Modified() method when it is modified. + type_checker: A type_checkers.ValueChecker instance to run on elements + inserted into this container. + """ + super(RepeatedScalarFieldContainer, self).__init__(message_listener) + self._type_checker = type_checker + + def append(self, value): + """Appends an item to the list. Similar to list.append().""" + self._type_checker.CheckValue(value) + self._values.append(value) + if not self._message_listener.dirty: + self._message_listener.Modified() + + def insert(self, key, value): + """Inserts the item at the specified position. Similar to list.insert().""" + self._type_checker.CheckValue(value) + self._values.insert(key, value) + if not self._message_listener.dirty: + self._message_listener.Modified() + + def extend(self, elem_seq): + """Extends by appending the given sequence. Similar to list.extend().""" + if not elem_seq: + return + + new_values = [] + for elem in elem_seq: + self._type_checker.CheckValue(elem) + new_values.append(elem) + self._values.extend(new_values) + self._message_listener.Modified() + + def MergeFrom(self, other): + """Appends the contents of another repeated field of the same type to this + one. We do not check the types of the individual fields. + """ + self._values.extend(other._values) + self._message_listener.Modified() + + def remove(self, elem): + """Removes an item from the list. Similar to list.remove().""" + self._values.remove(elem) + self._message_listener.Modified() + + def __setitem__(self, key, value): + """Sets the item on the specified position.""" + self._type_checker.CheckValue(value) + self._values[key] = value + self._message_listener.Modified() + + def __getslice__(self, start, stop): + """Retrieves the subset of items from between the specified indices.""" + return self._values[start:stop] + + def __setslice__(self, start, stop, values): + """Sets the subset of items from between the specified indices.""" + new_values = [] + for value in values: + self._type_checker.CheckValue(value) + new_values.append(value) + self._values[start:stop] = new_values + self._message_listener.Modified() + + def __delitem__(self, key): + """Deletes the item at the specified position.""" + del self._values[key] + self._message_listener.Modified() + + def __delslice__(self, start, stop): + """Deletes the subset of items from between the specified indices.""" + del self._values[start:stop] + self._message_listener.Modified() + + def __eq__(self, other): + """Compares the current instance with another one.""" + if self is other: + return True + # Special case for the same type which should be common and fast. + if isinstance(other, self.__class__): + return other._values == self._values + # We are presumably comparing against some other sequence type. + return other == self._values + + +class RepeatedCompositeFieldContainer(BaseContainer): + + """Simple, list-like container for holding repeated composite fields.""" + + # Disallows assignment to other attributes. + __slots__ = ['_message_descriptor'] + + def __init__(self, message_listener, message_descriptor): + """ + Note that we pass in a descriptor instead of the generated directly, + since at the time we construct a _RepeatedCompositeFieldContainer we + haven't yet necessarily initialized the type that will be contained in the + container. + + Args: + message_listener: A MessageListener implementation. + The RepeatedCompositeFieldContainer will call this object's + Modified() method when it is modified. + message_descriptor: A Descriptor instance describing the protocol type + that should be present in this container. We'll use the + _concrete_class field of this descriptor when the client calls add(). + """ + super(RepeatedCompositeFieldContainer, self).__init__(message_listener) + self._message_descriptor = message_descriptor + + def add(self, **kwargs): + """Adds a new element at the end of the list and returns it. Keyword + arguments may be used to initialize the element. + """ + new_element = self._message_descriptor._concrete_class(**kwargs) + new_element._SetListener(self._message_listener) + self._values.append(new_element) + if not self._message_listener.dirty: + self._message_listener.Modified() + return new_element + + def extend(self, elem_seq): + """Extends by appending the given sequence of elements of the same type + as this one, copying each individual message. + """ + message_class = self._message_descriptor._concrete_class + listener = self._message_listener + values = self._values + for message in elem_seq: + new_element = message_class() + new_element._SetListener(listener) + new_element.MergeFrom(message) + values.append(new_element) + listener.Modified() + + def MergeFrom(self, other): + """Appends the contents of another repeated field of the same type to this + one, copying each individual message. + """ + self.extend(other._values) + + def remove(self, elem): + """Removes an item from the list. Similar to list.remove().""" + self._values.remove(elem) + self._message_listener.Modified() + + def __getslice__(self, start, stop): + """Retrieves the subset of items from between the specified indices.""" + return self._values[start:stop] + + def __delitem__(self, key): + """Deletes the item at the specified position.""" + del self._values[key] + self._message_listener.Modified() + + def __delslice__(self, start, stop): + """Deletes the subset of items from between the specified indices.""" + del self._values[start:stop] + self._message_listener.Modified() + + def __eq__(self, other): + """Compares the current instance with another one.""" + if self is other: + return True + if not isinstance(other, self.__class__): + raise TypeError('Can only compare repeated composite fields against ' + 'other repeated composite fields.') + return self._values == other._values diff --git a/code/push/google/protobuf/internal/cpp_message.py b/code/push/google/protobuf/internal/cpp_message.py new file mode 100644 index 0000000..23ab9ba --- /dev/null +++ b/code/push/google/protobuf/internal/cpp_message.py @@ -0,0 +1,663 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Contains helper functions used to create protocol message classes from +Descriptor objects at runtime backed by the protocol buffer C++ API. +""" + +__author__ = 'petar@google.com (Petar Petrov)' + +import copy_reg +import operator +from google.protobuf.internal import _net_proto2___python +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import message + + +_LABEL_REPEATED = _net_proto2___python.LABEL_REPEATED +_LABEL_OPTIONAL = _net_proto2___python.LABEL_OPTIONAL +_CPPTYPE_MESSAGE = _net_proto2___python.CPPTYPE_MESSAGE +_TYPE_MESSAGE = _net_proto2___python.TYPE_MESSAGE + + +def GetDescriptorPool(): + """Creates a new DescriptorPool C++ object.""" + return _net_proto2___python.NewCDescriptorPool() + + +_pool = GetDescriptorPool() + + +def GetFieldDescriptor(full_field_name): + """Searches for a field descriptor given a full field name.""" + return _pool.FindFieldByName(full_field_name) + + +def BuildFile(content): + """Registers a new proto file in the underlying C++ descriptor pool.""" + _net_proto2___python.BuildFile(content) + + +def GetExtensionDescriptor(full_extension_name): + """Searches for extension descriptor given a full field name.""" + return _pool.FindExtensionByName(full_extension_name) + + +def NewCMessage(full_message_name): + """Creates a new C++ protocol message by its name.""" + return _net_proto2___python.NewCMessage(full_message_name) + + +def ScalarProperty(cdescriptor): + """Returns a scalar property for the given descriptor.""" + + def Getter(self): + return self._cmsg.GetScalar(cdescriptor) + + def Setter(self, value): + self._cmsg.SetScalar(cdescriptor, value) + + return property(Getter, Setter) + + +def CompositeProperty(cdescriptor, message_type): + """Returns a Python property the given composite field.""" + + def Getter(self): + sub_message = self._composite_fields.get(cdescriptor.name, None) + if sub_message is None: + cmessage = self._cmsg.NewSubMessage(cdescriptor) + sub_message = message_type._concrete_class(__cmessage=cmessage) + self._composite_fields[cdescriptor.name] = sub_message + return sub_message + + return property(Getter) + + +class RepeatedScalarContainer(object): + """Container for repeated scalar fields.""" + + __slots__ = ['_message', '_cfield_descriptor', '_cmsg'] + + def __init__(self, msg, cfield_descriptor): + self._message = msg + self._cmsg = msg._cmsg + self._cfield_descriptor = cfield_descriptor + + def append(self, value): + self._cmsg.AddRepeatedScalar( + self._cfield_descriptor, value) + + def extend(self, sequence): + for element in sequence: + self.append(element) + + def insert(self, key, value): + values = self[slice(None, None, None)] + values.insert(key, value) + self._cmsg.AssignRepeatedScalar(self._cfield_descriptor, values) + + def remove(self, value): + values = self[slice(None, None, None)] + values.remove(value) + self._cmsg.AssignRepeatedScalar(self._cfield_descriptor, values) + + def __setitem__(self, key, value): + values = self[slice(None, None, None)] + values[key] = value + self._cmsg.AssignRepeatedScalar(self._cfield_descriptor, values) + + def __getitem__(self, key): + return self._cmsg.GetRepeatedScalar(self._cfield_descriptor, key) + + def __delitem__(self, key): + self._cmsg.DeleteRepeatedField(self._cfield_descriptor, key) + + def __len__(self): + return len(self[slice(None, None, None)]) + + def __eq__(self, other): + if self is other: + return True + if not operator.isSequenceType(other): + raise TypeError( + 'Can only compare repeated scalar fields against sequences.') + # We are presumably comparing against some other sequence type. + return other == self[slice(None, None, None)] + + def __ne__(self, other): + return not self == other + + def __hash__(self): + raise TypeError('unhashable object') + + def sort(self, *args, **kwargs): + # Maintain compatibility with the previous interface. + if 'sort_function' in kwargs: + kwargs['cmp'] = kwargs.pop('sort_function') + self._cmsg.AssignRepeatedScalar(self._cfield_descriptor, + sorted(self, *args, **kwargs)) + + +def RepeatedScalarProperty(cdescriptor): + """Returns a Python property the given repeated scalar field.""" + + def Getter(self): + container = self._composite_fields.get(cdescriptor.name, None) + if container is None: + container = RepeatedScalarContainer(self, cdescriptor) + self._composite_fields[cdescriptor.name] = container + return container + + def Setter(self, new_value): + raise AttributeError('Assignment not allowed to repeated field ' + '"%s" in protocol message object.' % cdescriptor.name) + + doc = 'Magic attribute generated for "%s" proto field.' % cdescriptor.name + return property(Getter, Setter, doc=doc) + + +class RepeatedCompositeContainer(object): + """Container for repeated composite fields.""" + + __slots__ = ['_message', '_subclass', '_cfield_descriptor', '_cmsg'] + + def __init__(self, msg, cfield_descriptor, subclass): + self._message = msg + self._cmsg = msg._cmsg + self._subclass = subclass + self._cfield_descriptor = cfield_descriptor + + def add(self, **kwargs): + cmessage = self._cmsg.AddMessage(self._cfield_descriptor) + return self._subclass(__cmessage=cmessage, __owner=self._message, **kwargs) + + def extend(self, elem_seq): + """Extends by appending the given sequence of elements of the same type + as this one, copying each individual message. + """ + for message in elem_seq: + self.add().MergeFrom(message) + + def remove(self, value): + # TODO(protocol-devel): This is inefficient as it needs to generate a + # message pointer for each message only to do index(). Move this to a C++ + # extension function. + self.__delitem__(self[slice(None, None, None)].index(value)) + + def MergeFrom(self, other): + for message in other[:]: + self.add().MergeFrom(message) + + def __getitem__(self, key): + cmessages = self._cmsg.GetRepeatedMessage( + self._cfield_descriptor, key) + subclass = self._subclass + if not isinstance(cmessages, list): + return subclass(__cmessage=cmessages, __owner=self._message) + + return [subclass(__cmessage=m, __owner=self._message) for m in cmessages] + + def __delitem__(self, key): + self._cmsg.DeleteRepeatedField( + self._cfield_descriptor, key) + + def __len__(self): + return self._cmsg.FieldLength(self._cfield_descriptor) + + def __eq__(self, other): + """Compares the current instance with another one.""" + if self is other: + return True + if not isinstance(other, self.__class__): + raise TypeError('Can only compare repeated composite fields against ' + 'other repeated composite fields.') + messages = self[slice(None, None, None)] + other_messages = other[slice(None, None, None)] + return messages == other_messages + + def __hash__(self): + raise TypeError('unhashable object') + + def sort(self, cmp=None, key=None, reverse=False, **kwargs): + # Maintain compatibility with the old interface. + if cmp is None and 'sort_function' in kwargs: + cmp = kwargs.pop('sort_function') + + # The cmp function, if provided, is passed the results of the key function, + # so we only need to wrap one of them. + if key is None: + index_key = self.__getitem__ + else: + index_key = lambda i: key(self[i]) + + # Sort the list of current indexes by the underlying object. + indexes = range(len(self)) + indexes.sort(cmp=cmp, key=index_key, reverse=reverse) + + # Apply the transposition. + for dest, src in enumerate(indexes): + if dest == src: + continue + self._cmsg.SwapRepeatedFieldElements(self._cfield_descriptor, dest, src) + # Don't swap the same value twice. + indexes[src] = src + + +def RepeatedCompositeProperty(cdescriptor, message_type): + """Returns a Python property for the given repeated composite field.""" + + def Getter(self): + container = self._composite_fields.get(cdescriptor.name, None) + if container is None: + container = RepeatedCompositeContainer( + self, cdescriptor, message_type._concrete_class) + self._composite_fields[cdescriptor.name] = container + return container + + def Setter(self, new_value): + raise AttributeError('Assignment not allowed to repeated field ' + '"%s" in protocol message object.' % cdescriptor.name) + + doc = 'Magic attribute generated for "%s" proto field.' % cdescriptor.name + return property(Getter, Setter, doc=doc) + + +class ExtensionDict(object): + """Extension dictionary added to each protocol message.""" + + def __init__(self, msg): + self._message = msg + self._cmsg = msg._cmsg + self._values = {} + + def __setitem__(self, extension, value): + from google.protobuf import descriptor + if not isinstance(extension, descriptor.FieldDescriptor): + raise KeyError('Bad extension %r.' % (extension,)) + cdescriptor = extension._cdescriptor + if (cdescriptor.label != _LABEL_OPTIONAL or + cdescriptor.cpp_type == _CPPTYPE_MESSAGE): + raise TypeError('Extension %r is repeated and/or a composite type.' % ( + extension.full_name,)) + self._cmsg.SetScalar(cdescriptor, value) + self._values[extension] = value + + def __getitem__(self, extension): + from google.protobuf import descriptor + if not isinstance(extension, descriptor.FieldDescriptor): + raise KeyError('Bad extension %r.' % (extension,)) + + cdescriptor = extension._cdescriptor + if (cdescriptor.label != _LABEL_REPEATED and + cdescriptor.cpp_type != _CPPTYPE_MESSAGE): + return self._cmsg.GetScalar(cdescriptor) + + ext = self._values.get(extension, None) + if ext is not None: + return ext + + ext = self._CreateNewHandle(extension) + self._values[extension] = ext + return ext + + def ClearExtension(self, extension): + from google.protobuf import descriptor + if not isinstance(extension, descriptor.FieldDescriptor): + raise KeyError('Bad extension %r.' % (extension,)) + self._cmsg.ClearFieldByDescriptor(extension._cdescriptor) + if extension in self._values: + del self._values[extension] + + def HasExtension(self, extension): + from google.protobuf import descriptor + if not isinstance(extension, descriptor.FieldDescriptor): + raise KeyError('Bad extension %r.' % (extension,)) + return self._cmsg.HasFieldByDescriptor(extension._cdescriptor) + + def _FindExtensionByName(self, name): + """Tries to find a known extension with the specified name. + + Args: + name: Extension full name. + + Returns: + Extension field descriptor. + """ + return self._message._extensions_by_name.get(name, None) + + def _CreateNewHandle(self, extension): + cdescriptor = extension._cdescriptor + if (cdescriptor.label != _LABEL_REPEATED and + cdescriptor.cpp_type == _CPPTYPE_MESSAGE): + cmessage = self._cmsg.NewSubMessage(cdescriptor) + return extension.message_type._concrete_class(__cmessage=cmessage) + + if cdescriptor.label == _LABEL_REPEATED: + if cdescriptor.cpp_type == _CPPTYPE_MESSAGE: + return RepeatedCompositeContainer( + self._message, cdescriptor, extension.message_type._concrete_class) + else: + return RepeatedScalarContainer(self._message, cdescriptor) + # This shouldn't happen! + assert False + return None + + +def NewMessage(bases, message_descriptor, dictionary): + """Creates a new protocol message *class*.""" + _AddClassAttributesForNestedExtensions(message_descriptor, dictionary) + _AddEnumValues(message_descriptor, dictionary) + _AddDescriptors(message_descriptor, dictionary) + return bases + + +def InitMessage(message_descriptor, cls): + """Constructs a new message instance (called before instance's __init__).""" + cls._extensions_by_name = {} + _AddInitMethod(message_descriptor, cls) + _AddMessageMethods(message_descriptor, cls) + _AddPropertiesForExtensions(message_descriptor, cls) + copy_reg.pickle(cls, lambda obj: (cls, (), obj.__getstate__())) + + +def _AddDescriptors(message_descriptor, dictionary): + """Sets up a new protocol message class dictionary. + + Args: + message_descriptor: A Descriptor instance describing this message type. + dictionary: Class dictionary to which we'll add a '__slots__' entry. + """ + dictionary['__descriptors'] = {} + for field in message_descriptor.fields: + dictionary['__descriptors'][field.name] = GetFieldDescriptor( + field.full_name) + + dictionary['__slots__'] = list(dictionary['__descriptors'].iterkeys()) + [ + '_cmsg', '_owner', '_composite_fields', 'Extensions', '_HACK_REFCOUNTS'] + + +def _AddEnumValues(message_descriptor, dictionary): + """Sets class-level attributes for all enum fields defined in this message. + + Args: + message_descriptor: Descriptor object for this message type. + dictionary: Class dictionary that should be populated. + """ + for enum_type in message_descriptor.enum_types: + dictionary[enum_type.name] = enum_type_wrapper.EnumTypeWrapper(enum_type) + for enum_value in enum_type.values: + dictionary[enum_value.name] = enum_value.number + + +def _AddClassAttributesForNestedExtensions(message_descriptor, dictionary): + """Adds class attributes for the nested extensions.""" + extension_dict = message_descriptor.extensions_by_name + for extension_name, extension_field in extension_dict.iteritems(): + assert extension_name not in dictionary + dictionary[extension_name] = extension_field + + +def _AddInitMethod(message_descriptor, cls): + """Adds an __init__ method to cls.""" + + # Create and attach message field properties to the message class. + # This can be done just once per message class, since property setters and + # getters are passed the message instance. + # This makes message instantiation extremely fast, and at the same time it + # doesn't require the creation of property objects for each message instance, + # which saves a lot of memory. + for field in message_descriptor.fields: + field_cdescriptor = cls.__descriptors[field.name] + if field.label == _LABEL_REPEATED: + if field.cpp_type == _CPPTYPE_MESSAGE: + value = RepeatedCompositeProperty(field_cdescriptor, field.message_type) + else: + value = RepeatedScalarProperty(field_cdescriptor) + elif field.cpp_type == _CPPTYPE_MESSAGE: + value = CompositeProperty(field_cdescriptor, field.message_type) + else: + value = ScalarProperty(field_cdescriptor) + setattr(cls, field.name, value) + + # Attach a constant with the field number. + constant_name = field.name.upper() + '_FIELD_NUMBER' + setattr(cls, constant_name, field.number) + + def Init(self, **kwargs): + """Message constructor.""" + cmessage = kwargs.pop('__cmessage', None) + if cmessage: + self._cmsg = cmessage + else: + self._cmsg = NewCMessage(message_descriptor.full_name) + + # Keep a reference to the owner, as the owner keeps a reference to the + # underlying protocol buffer message. + owner = kwargs.pop('__owner', None) + if owner: + self._owner = owner + + if message_descriptor.is_extendable: + self.Extensions = ExtensionDict(self) + else: + # Reference counting in the C++ code is broken and depends on + # the Extensions reference to keep this object alive during unit + # tests (see b/4856052). Remove this once b/4945904 is fixed. + self._HACK_REFCOUNTS = self + self._composite_fields = {} + + for field_name, field_value in kwargs.iteritems(): + field_cdescriptor = self.__descriptors.get(field_name, None) + if not field_cdescriptor: + raise ValueError('Protocol message has no "%s" field.' % field_name) + if field_cdescriptor.label == _LABEL_REPEATED: + if field_cdescriptor.cpp_type == _CPPTYPE_MESSAGE: + field_name = getattr(self, field_name) + for val in field_value: + field_name.add().MergeFrom(val) + else: + getattr(self, field_name).extend(field_value) + elif field_cdescriptor.cpp_type == _CPPTYPE_MESSAGE: + getattr(self, field_name).MergeFrom(field_value) + else: + setattr(self, field_name, field_value) + + Init.__module__ = None + Init.__doc__ = None + cls.__init__ = Init + + +def _IsMessageSetExtension(field): + """Checks if a field is a message set extension.""" + return (field.is_extension and + field.containing_type.has_options and + field.containing_type.GetOptions().message_set_wire_format and + field.type == _TYPE_MESSAGE and + field.message_type == field.extension_scope and + field.label == _LABEL_OPTIONAL) + + +def _AddMessageMethods(message_descriptor, cls): + """Adds the methods to a protocol message class.""" + if message_descriptor.is_extendable: + + def ClearExtension(self, extension): + self.Extensions.ClearExtension(extension) + + def HasExtension(self, extension): + return self.Extensions.HasExtension(extension) + + def HasField(self, field_name): + return self._cmsg.HasField(field_name) + + def ClearField(self, field_name): + child_cmessage = None + if field_name in self._composite_fields: + child_field = self._composite_fields[field_name] + del self._composite_fields[field_name] + + child_cdescriptor = self.__descriptors[field_name] + # TODO(anuraag): Support clearing repeated message fields as well. + if (child_cdescriptor.label != _LABEL_REPEATED and + child_cdescriptor.cpp_type == _CPPTYPE_MESSAGE): + child_field._owner = None + child_cmessage = child_field._cmsg + + if child_cmessage is not None: + self._cmsg.ClearField(field_name, child_cmessage) + else: + self._cmsg.ClearField(field_name) + + def Clear(self): + cmessages_to_release = [] + for field_name, child_field in self._composite_fields.iteritems(): + child_cdescriptor = self.__descriptors[field_name] + # TODO(anuraag): Support clearing repeated message fields as well. + if (child_cdescriptor.label != _LABEL_REPEATED and + child_cdescriptor.cpp_type == _CPPTYPE_MESSAGE): + child_field._owner = None + cmessages_to_release.append((child_cdescriptor, child_field._cmsg)) + self._composite_fields.clear() + self._cmsg.Clear(cmessages_to_release) + + def IsInitialized(self, errors=None): + if self._cmsg.IsInitialized(): + return True + if errors is not None: + errors.extend(self.FindInitializationErrors()); + return False + + def SerializeToString(self): + if not self.IsInitialized(): + raise message.EncodeError( + 'Message %s is missing required fields: %s' % ( + self._cmsg.full_name, ','.join(self.FindInitializationErrors()))) + return self._cmsg.SerializeToString() + + def SerializePartialToString(self): + return self._cmsg.SerializePartialToString() + + def ParseFromString(self, serialized): + self.Clear() + self.MergeFromString(serialized) + + def MergeFromString(self, serialized): + byte_size = self._cmsg.MergeFromString(serialized) + if byte_size < 0: + raise message.DecodeError('Unable to merge from string.') + return byte_size + + def MergeFrom(self, msg): + if not isinstance(msg, cls): + raise TypeError( + "Parameter to MergeFrom() must be instance of same class: " + "expected %s got %s." % (cls.__name__, type(msg).__name__)) + self._cmsg.MergeFrom(msg._cmsg) + + def CopyFrom(self, msg): + self._cmsg.CopyFrom(msg._cmsg) + + def ByteSize(self): + return self._cmsg.ByteSize() + + def SetInParent(self): + return self._cmsg.SetInParent() + + def ListFields(self): + all_fields = [] + field_list = self._cmsg.ListFields() + fields_by_name = cls.DESCRIPTOR.fields_by_name + for is_extension, field_name in field_list: + if is_extension: + extension = cls._extensions_by_name[field_name] + all_fields.append((extension, self.Extensions[extension])) + else: + field_descriptor = fields_by_name[field_name] + all_fields.append( + (field_descriptor, getattr(self, field_name))) + all_fields.sort(key=lambda item: item[0].number) + return all_fields + + def FindInitializationErrors(self): + return self._cmsg.FindInitializationErrors() + + def __str__(self): + return self._cmsg.DebugString() + + def __eq__(self, other): + if self is other: + return True + if not isinstance(other, self.__class__): + return False + return self.ListFields() == other.ListFields() + + def __ne__(self, other): + return not self == other + + def __hash__(self): + raise TypeError('unhashable object') + + def __unicode__(self): + # Lazy import to prevent circular import when text_format imports this file. + from google.protobuf import text_format + return text_format.MessageToString(self, as_utf8=True).decode('utf-8') + + # Attach the local methods to the message class. + for key, value in locals().copy().iteritems(): + if key not in ('key', 'value', '__builtins__', '__name__', '__doc__'): + setattr(cls, key, value) + + # Static methods: + + def RegisterExtension(extension_handle): + extension_handle.containing_type = cls.DESCRIPTOR + cls._extensions_by_name[extension_handle.full_name] = extension_handle + + if _IsMessageSetExtension(extension_handle): + # MessageSet extension. Also register under type name. + cls._extensions_by_name[ + extension_handle.message_type.full_name] = extension_handle + cls.RegisterExtension = staticmethod(RegisterExtension) + + def FromString(string): + msg = cls() + msg.MergeFromString(string) + return msg + cls.FromString = staticmethod(FromString) + + + +def _AddPropertiesForExtensions(message_descriptor, cls): + """Adds properties for all fields in this protocol message type.""" + extension_dict = message_descriptor.extensions_by_name + for extension_name, extension_field in extension_dict.iteritems(): + constant_name = extension_name.upper() + '_FIELD_NUMBER' + setattr(cls, constant_name, extension_field.number) diff --git a/code/push/google/protobuf/internal/decoder.py b/code/push/google/protobuf/internal/decoder.py new file mode 100644 index 0000000..9ad5a29 --- /dev/null +++ b/code/push/google/protobuf/internal/decoder.py @@ -0,0 +1,720 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Code for decoding protocol buffer primitives. + +This code is very similar to encoder.py -- read the docs for that module first. + +A "decoder" is a function with the signature: + Decode(buffer, pos, end, message, field_dict) +The arguments are: + buffer: The string containing the encoded message. + pos: The current position in the string. + end: The position in the string where the current message ends. May be + less than len(buffer) if we're reading a sub-message. + message: The message object into which we're parsing. + field_dict: message._fields (avoids a hashtable lookup). +The decoder reads the field and stores it into field_dict, returning the new +buffer position. A decoder for a repeated field may proactively decode all of +the elements of that field, if they appear consecutively. + +Note that decoders may throw any of the following: + IndexError: Indicates a truncated message. + struct.error: Unpacking of a fixed-width field failed. + message.DecodeError: Other errors. + +Decoders are expected to raise an exception if they are called with pos > end. +This allows callers to be lax about bounds checking: it's fineto read past +"end" as long as you are sure that someone else will notice and throw an +exception later on. + +Something up the call stack is expected to catch IndexError and struct.error +and convert them to message.DecodeError. + +Decoders are constructed using decoder constructors with the signature: + MakeDecoder(field_number, is_repeated, is_packed, key, new_default) +The arguments are: + field_number: The field number of the field we want to decode. + is_repeated: Is the field a repeated field? (bool) + is_packed: Is the field a packed field? (bool) + key: The key to use when looking up the field within field_dict. + (This is actually the FieldDescriptor but nothing in this + file should depend on that.) + new_default: A function which takes a message object as a parameter and + returns a new instance of the default value for this field. + (This is called for repeated fields and sub-messages, when an + instance does not already exist.) + +As with encoders, we define a decoder constructor for every type of field. +Then, for every field of every message class we construct an actual decoder. +That decoder goes into a dict indexed by tag, so when we decode a message +we repeatedly read a tag, look up the corresponding decoder, and invoke it. +""" + +__author__ = 'kenton@google.com (Kenton Varda)' + +import struct +from push.google.protobuf.internal import encoder +from push.google.protobuf.internal import wire_format +from push.google.protobuf import message + + +# This will overflow and thus become IEEE-754 "infinity". We would use +# "float('inf')" but it doesn't work on Windows pre-Python-2.6. +_POS_INF = 1e10000 +_NEG_INF = -_POS_INF +_NAN = _POS_INF * 0 + + +# This is not for optimization, but rather to avoid conflicts with local +# variables named "message". +_DecodeError = message.DecodeError + + +def _VarintDecoder(mask): + """Return an encoder for a basic varint value (does not include tag). + + Decoded values will be bitwise-anded with the given mask before being + returned, e.g. to limit them to 32 bits. The returned decoder does not + take the usual "end" parameter -- the caller is expected to do bounds checking + after the fact (often the caller can defer such checking until later). The + decoder returns a (value, new_pos) pair. + """ + + local_ord = ord + def DecodeVarint(buffer, pos): + result = 0 + shift = 0 + while 1: + b = local_ord(buffer[pos]) + result |= ((b & 0x7f) << shift) + pos += 1 + if not (b & 0x80): + result &= mask + return (result, pos) + shift += 7 + if shift >= 64: + raise _DecodeError('Too many bytes when decoding varint.') + return DecodeVarint + + +def _SignedVarintDecoder(mask): + """Like _VarintDecoder() but decodes signed values.""" + + local_ord = ord + def DecodeVarint(buffer, pos): + result = 0 + shift = 0 + while 1: + b = local_ord(buffer[pos]) + result |= ((b & 0x7f) << shift) + pos += 1 + if not (b & 0x80): + if result > 0x7fffffffffffffff: + result -= (1 << 64) + result |= ~mask + else: + result &= mask + return (result, pos) + shift += 7 + if shift >= 64: + raise _DecodeError('Too many bytes when decoding varint.') + return DecodeVarint + + +_DecodeVarint = _VarintDecoder((1 << 64) - 1) +_DecodeSignedVarint = _SignedVarintDecoder((1 << 64) - 1) + +# Use these versions for values which must be limited to 32 bits. +_DecodeVarint32 = _VarintDecoder((1 << 32) - 1) +_DecodeSignedVarint32 = _SignedVarintDecoder((1 << 32) - 1) + + +def ReadTag(buffer, pos): + """Read a tag from the buffer, and return a (tag_bytes, new_pos) tuple. + + We return the raw bytes of the tag rather than decoding them. The raw + bytes can then be used to look up the proper decoder. This effectively allows + us to trade some work that would be done in pure-python (decoding a varint) + for work that is done in C (searching for a byte string in a hash table). + In a low-level language it would be much cheaper to decode the varint and + use that, but not in Python. + """ + + start = pos + while ord(buffer[pos]) & 0x80: + pos += 1 + pos += 1 + return (buffer[start:pos], pos) + + +# -------------------------------------------------------------------- + + +def _SimpleDecoder(wire_type, decode_value): + """Return a constructor for a decoder for fields of a particular type. + + Args: + wire_type: The field's wire type. + decode_value: A function which decodes an individual value, e.g. + _DecodeVarint() + """ + + def SpecificDecoder(field_number, is_repeated, is_packed, key, new_default): + if is_packed: + local_DecodeVarint = _DecodeVarint + def DecodePackedField(buffer, pos, end, message, field_dict): + value = field_dict.get(key) + if value is None: + value = field_dict.setdefault(key, new_default(message)) + (endpoint, pos) = local_DecodeVarint(buffer, pos) + endpoint += pos + if endpoint > end: + raise _DecodeError('Truncated message.') + while pos < endpoint: + (element, pos) = decode_value(buffer, pos) + value.append(element) + if pos > endpoint: + del value[-1] # Discard corrupt value. + raise _DecodeError('Packed element was truncated.') + return pos + return DecodePackedField + elif is_repeated: + tag_bytes = encoder.TagBytes(field_number, wire_type) + tag_len = len(tag_bytes) + def DecodeRepeatedField(buffer, pos, end, message, field_dict): + value = field_dict.get(key) + if value is None: + value = field_dict.setdefault(key, new_default(message)) + while 1: + (element, new_pos) = decode_value(buffer, pos) + value.append(element) + # Predict that the next tag is another copy of the same repeated + # field. + pos = new_pos + tag_len + if buffer[new_pos:pos] != tag_bytes or new_pos >= end: + # Prediction failed. Return. + if new_pos > end: + raise _DecodeError('Truncated message.') + return new_pos + return DecodeRepeatedField + else: + def DecodeField(buffer, pos, end, message, field_dict): + (field_dict[key], pos) = decode_value(buffer, pos) + if pos > end: + del field_dict[key] # Discard corrupt value. + raise _DecodeError('Truncated message.') + return pos + return DecodeField + + return SpecificDecoder + + +def _ModifiedDecoder(wire_type, decode_value, modify_value): + """Like SimpleDecoder but additionally invokes modify_value on every value + before storing it. Usually modify_value is ZigZagDecode. + """ + + # Reusing _SimpleDecoder is slightly slower than copying a bunch of code, but + # not enough to make a significant difference. + + def InnerDecode(buffer, pos): + (result, new_pos) = decode_value(buffer, pos) + return (modify_value(result), new_pos) + return _SimpleDecoder(wire_type, InnerDecode) + + +def _StructPackDecoder(wire_type, format): + """Return a constructor for a decoder for a fixed-width field. + + Args: + wire_type: The field's wire type. + format: The format string to pass to struct.unpack(). + """ + + value_size = struct.calcsize(format) + local_unpack = struct.unpack + + # Reusing _SimpleDecoder is slightly slower than copying a bunch of code, but + # not enough to make a significant difference. + + # Note that we expect someone up-stack to catch struct.error and convert + # it to _DecodeError -- this way we don't have to set up exception- + # handling blocks every time we parse one value. + + def InnerDecode(buffer, pos): + new_pos = pos + value_size + result = local_unpack(format, buffer[pos:new_pos])[0] + return (result, new_pos) + return _SimpleDecoder(wire_type, InnerDecode) + + +def _FloatDecoder(): + """Returns a decoder for a float field. + + This code works around a bug in struct.unpack for non-finite 32-bit + floating-point values. + """ + + local_unpack = struct.unpack + + def InnerDecode(buffer, pos): + # We expect a 32-bit value in little-endian byte order. Bit 1 is the sign + # bit, bits 2-9 represent the exponent, and bits 10-32 are the significand. + new_pos = pos + 4 + float_bytes = buffer[pos:new_pos] + + # If this value has all its exponent bits set, then it's non-finite. + # In Python 2.4, struct.unpack will convert it to a finite 64-bit value. + # To avoid that, we parse it specially. + if ((float_bytes[3] in '\x7F\xFF') + and (float_bytes[2] >= '\x80')): + # If at least one significand bit is set... + if float_bytes[0:3] != '\x00\x00\x80': + return (_NAN, new_pos) + # If sign bit is set... + if float_bytes[3] == '\xFF': + return (_NEG_INF, new_pos) + return (_POS_INF, new_pos) + + # Note that we expect someone up-stack to catch struct.error and convert + # it to _DecodeError -- this way we don't have to set up exception- + # handling blocks every time we parse one value. + result = local_unpack('= '\xF0') + and (double_bytes[0:7] != '\x00\x00\x00\x00\x00\x00\xF0')): + return (_NAN, new_pos) + + # Note that we expect someone up-stack to catch struct.error and convert + # it to _DecodeError -- this way we don't have to set up exception- + # handling blocks every time we parse one value. + result = local_unpack(' end: + raise _DecodeError('Truncated string.') + value.append(local_unicode(buffer[pos:new_pos], 'utf-8')) + # Predict that the next tag is another copy of the same repeated field. + pos = new_pos + tag_len + if buffer[new_pos:pos] != tag_bytes or new_pos == end: + # Prediction failed. Return. + return new_pos + return DecodeRepeatedField + else: + def DecodeField(buffer, pos, end, message, field_dict): + (size, pos) = local_DecodeVarint(buffer, pos) + new_pos = pos + size + if new_pos > end: + raise _DecodeError('Truncated string.') + field_dict[key] = local_unicode(buffer[pos:new_pos], 'utf-8') + return new_pos + return DecodeField + + +def BytesDecoder(field_number, is_repeated, is_packed, key, new_default): + """Returns a decoder for a bytes field.""" + + local_DecodeVarint = _DecodeVarint + + assert not is_packed + if is_repeated: + tag_bytes = encoder.TagBytes(field_number, + wire_format.WIRETYPE_LENGTH_DELIMITED) + tag_len = len(tag_bytes) + def DecodeRepeatedField(buffer, pos, end, message, field_dict): + value = field_dict.get(key) + if value is None: + value = field_dict.setdefault(key, new_default(message)) + while 1: + (size, pos) = local_DecodeVarint(buffer, pos) + new_pos = pos + size + if new_pos > end: + raise _DecodeError('Truncated string.') + value.append(buffer[pos:new_pos]) + # Predict that the next tag is another copy of the same repeated field. + pos = new_pos + tag_len + if buffer[new_pos:pos] != tag_bytes or new_pos == end: + # Prediction failed. Return. + return new_pos + return DecodeRepeatedField + else: + def DecodeField(buffer, pos, end, message, field_dict): + (size, pos) = local_DecodeVarint(buffer, pos) + new_pos = pos + size + if new_pos > end: + raise _DecodeError('Truncated string.') + field_dict[key] = buffer[pos:new_pos] + return new_pos + return DecodeField + + +def GroupDecoder(field_number, is_repeated, is_packed, key, new_default): + """Returns a decoder for a group field.""" + + end_tag_bytes = encoder.TagBytes(field_number, + wire_format.WIRETYPE_END_GROUP) + end_tag_len = len(end_tag_bytes) + + assert not is_packed + if is_repeated: + tag_bytes = encoder.TagBytes(field_number, + wire_format.WIRETYPE_START_GROUP) + tag_len = len(tag_bytes) + def DecodeRepeatedField(buffer, pos, end, message, field_dict): + value = field_dict.get(key) + if value is None: + value = field_dict.setdefault(key, new_default(message)) + while 1: + value = field_dict.get(key) + if value is None: + value = field_dict.setdefault(key, new_default(message)) + # Read sub-message. + pos = value.add()._InternalParse(buffer, pos, end) + # Read end tag. + new_pos = pos+end_tag_len + if buffer[pos:new_pos] != end_tag_bytes or new_pos > end: + raise _DecodeError('Missing group end tag.') + # Predict that the next tag is another copy of the same repeated field. + pos = new_pos + tag_len + if buffer[new_pos:pos] != tag_bytes or new_pos == end: + # Prediction failed. Return. + return new_pos + return DecodeRepeatedField + else: + def DecodeField(buffer, pos, end, message, field_dict): + value = field_dict.get(key) + if value is None: + value = field_dict.setdefault(key, new_default(message)) + # Read sub-message. + pos = value._InternalParse(buffer, pos, end) + # Read end tag. + new_pos = pos+end_tag_len + if buffer[pos:new_pos] != end_tag_bytes or new_pos > end: + raise _DecodeError('Missing group end tag.') + return new_pos + return DecodeField + + +def MessageDecoder(field_number, is_repeated, is_packed, key, new_default): + """Returns a decoder for a message field.""" + + local_DecodeVarint = _DecodeVarint + + assert not is_packed + if is_repeated: + tag_bytes = encoder.TagBytes(field_number, + wire_format.WIRETYPE_LENGTH_DELIMITED) + tag_len = len(tag_bytes) + def DecodeRepeatedField(buffer, pos, end, message, field_dict): + value = field_dict.get(key) + if value is None: + value = field_dict.setdefault(key, new_default(message)) + while 1: + value = field_dict.get(key) + if value is None: + value = field_dict.setdefault(key, new_default(message)) + # Read length. + (size, pos) = local_DecodeVarint(buffer, pos) + new_pos = pos + size + if new_pos > end: + raise _DecodeError('Truncated message.') + # Read sub-message. + if value.add()._InternalParse(buffer, pos, new_pos) != new_pos: + # The only reason _InternalParse would return early is if it + # encountered an end-group tag. + raise _DecodeError('Unexpected end-group tag.') + # Predict that the next tag is another copy of the same repeated field. + pos = new_pos + tag_len + if buffer[new_pos:pos] != tag_bytes or new_pos == end: + # Prediction failed. Return. + return new_pos + return DecodeRepeatedField + else: + def DecodeField(buffer, pos, end, message, field_dict): + value = field_dict.get(key) + if value is None: + value = field_dict.setdefault(key, new_default(message)) + # Read length. + (size, pos) = local_DecodeVarint(buffer, pos) + new_pos = pos + size + if new_pos > end: + raise _DecodeError('Truncated message.') + # Read sub-message. + if value._InternalParse(buffer, pos, new_pos) != new_pos: + # The only reason _InternalParse would return early is if it encountered + # an end-group tag. + raise _DecodeError('Unexpected end-group tag.') + return new_pos + return DecodeField + + +# -------------------------------------------------------------------- + +MESSAGE_SET_ITEM_TAG = encoder.TagBytes(1, wire_format.WIRETYPE_START_GROUP) + +def MessageSetItemDecoder(extensions_by_number): + """Returns a decoder for a MessageSet item. + + The parameter is the _extensions_by_number map for the message class. + + The message set message looks like this: + message MessageSet { + repeated group Item = 1 { + required int32 type_id = 2; + required string message = 3; + } + } + """ + + type_id_tag_bytes = encoder.TagBytes(2, wire_format.WIRETYPE_VARINT) + message_tag_bytes = encoder.TagBytes(3, wire_format.WIRETYPE_LENGTH_DELIMITED) + item_end_tag_bytes = encoder.TagBytes(1, wire_format.WIRETYPE_END_GROUP) + + local_ReadTag = ReadTag + local_DecodeVarint = _DecodeVarint + local_SkipField = SkipField + + def DecodeItem(buffer, pos, end, message, field_dict): + message_set_item_start = pos + type_id = -1 + message_start = -1 + message_end = -1 + + # Technically, type_id and message can appear in any order, so we need + # a little loop here. + while 1: + (tag_bytes, pos) = local_ReadTag(buffer, pos) + if tag_bytes == type_id_tag_bytes: + (type_id, pos) = local_DecodeVarint(buffer, pos) + elif tag_bytes == message_tag_bytes: + (size, message_start) = local_DecodeVarint(buffer, pos) + pos = message_end = message_start + size + elif tag_bytes == item_end_tag_bytes: + break + else: + pos = SkipField(buffer, pos, end, tag_bytes) + if pos == -1: + raise _DecodeError('Missing group end tag.') + + if pos > end: + raise _DecodeError('Truncated message.') + + if type_id == -1: + raise _DecodeError('MessageSet item missing type_id.') + if message_start == -1: + raise _DecodeError('MessageSet item missing message.') + + extension = extensions_by_number.get(type_id) + if extension is not None: + value = field_dict.get(extension) + if value is None: + value = field_dict.setdefault( + extension, extension.message_type._concrete_class()) + if value._InternalParse(buffer, message_start,message_end) != message_end: + # The only reason _InternalParse would return early is if it encountered + # an end-group tag. + raise _DecodeError('Unexpected end-group tag.') + else: + if not message._unknown_fields: + message._unknown_fields = [] + message._unknown_fields.append((MESSAGE_SET_ITEM_TAG, + buffer[message_set_item_start:pos])) + + return pos + + return DecodeItem + +# -------------------------------------------------------------------- +# Optimization is not as heavy here because calls to SkipField() are rare, +# except for handling end-group tags. + +def _SkipVarint(buffer, pos, end): + """Skip a varint value. Returns the new position.""" + + while ord(buffer[pos]) & 0x80: + pos += 1 + pos += 1 + if pos > end: + raise _DecodeError('Truncated message.') + return pos + +def _SkipFixed64(buffer, pos, end): + """Skip a fixed64 value. Returns the new position.""" + + pos += 8 + if pos > end: + raise _DecodeError('Truncated message.') + return pos + +def _SkipLengthDelimited(buffer, pos, end): + """Skip a length-delimited value. Returns the new position.""" + + (size, pos) = _DecodeVarint(buffer, pos) + pos += size + if pos > end: + raise _DecodeError('Truncated message.') + return pos + +def _SkipGroup(buffer, pos, end): + """Skip sub-group. Returns the new position.""" + + while 1: + (tag_bytes, pos) = ReadTag(buffer, pos) + new_pos = SkipField(buffer, pos, end, tag_bytes) + if new_pos == -1: + return pos + pos = new_pos + +def _EndGroup(buffer, pos, end): + """Skipping an END_GROUP tag returns -1 to tell the parent loop to break.""" + + return -1 + +def _SkipFixed32(buffer, pos, end): + """Skip a fixed32 value. Returns the new position.""" + + pos += 4 + if pos > end: + raise _DecodeError('Truncated message.') + return pos + +def _RaiseInvalidWireType(buffer, pos, end): + """Skip function for unknown wire types. Raises an exception.""" + + raise _DecodeError('Tag had invalid wire type.') + +def _FieldSkipper(): + """Constructs the SkipField function.""" + + WIRETYPE_TO_SKIPPER = [ + _SkipVarint, + _SkipFixed64, + _SkipLengthDelimited, + _SkipGroup, + _EndGroup, + _SkipFixed32, + _RaiseInvalidWireType, + _RaiseInvalidWireType, + ] + + wiretype_mask = wire_format.TAG_TYPE_MASK + local_ord = ord + + def SkipField(buffer, pos, end, tag_bytes): + """Skips a field with the specified tag. + + |pos| should point to the byte immediately after the tag. + + Returns: + The new position (after the tag value), or -1 if the tag is an end-group + tag (in which case the calling loop should break). + """ + + # The wire type is always in the first byte since varints are little-endian. + wire_type = local_ord(tag_bytes[0]) & wiretype_mask + return WIRETYPE_TO_SKIPPER[wire_type](buffer, pos, end) + + return SkipField + +SkipField = _FieldSkipper() diff --git a/code/push/google/protobuf/internal/descriptor_database_test.py b/code/push/google/protobuf/internal/descriptor_database_test.py new file mode 100644 index 0000000..d0ca789 --- /dev/null +++ b/code/push/google/protobuf/internal/descriptor_database_test.py @@ -0,0 +1,63 @@ +#! /usr/bin/python +# +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Tests for google.protobuf.descriptor_database.""" + +__author__ = 'matthewtoia@google.com (Matt Toia)' + +import unittest +from google.protobuf import descriptor_pb2 +from google.protobuf.internal import factory_test2_pb2 +from google.protobuf import descriptor_database + + +class DescriptorDatabaseTest(unittest.TestCase): + + def testAdd(self): + db = descriptor_database.DescriptorDatabase() + file_desc_proto = descriptor_pb2.FileDescriptorProto.FromString( + factory_test2_pb2.DESCRIPTOR.serialized_pb) + db.Add(file_desc_proto) + + self.assertEquals(file_desc_proto, db.FindFileByName( + 'net/proto2/python/internal/factory_test2.proto')) + self.assertEquals(file_desc_proto, db.FindFileContainingSymbol( + 'net.proto2.python.internal.Factory2Message')) + self.assertEquals(file_desc_proto, db.FindFileContainingSymbol( + 'net.proto2.python.internal.Factory2Message.NestedFactory2Message')) + self.assertEquals(file_desc_proto, db.FindFileContainingSymbol( + 'net.proto2.python.internal.Factory2Enum')) + self.assertEquals(file_desc_proto, db.FindFileContainingSymbol( + 'net.proto2.python.internal.Factory2Message.NestedFactory2Enum')) + +if __name__ == '__main__': + unittest.main() diff --git a/code/push/google/protobuf/internal/descriptor_pool_test.py b/code/push/google/protobuf/internal/descriptor_pool_test.py new file mode 100644 index 0000000..a615d78 --- /dev/null +++ b/code/push/google/protobuf/internal/descriptor_pool_test.py @@ -0,0 +1,220 @@ +#! /usr/bin/python +# +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Tests for google.protobuf.descriptor_pool.""" + +__author__ = 'matthewtoia@google.com (Matt Toia)' + +import unittest +from google.protobuf import descriptor_pb2 +from google.protobuf.internal import factory_test1_pb2 +from google.protobuf.internal import factory_test2_pb2 +from google.protobuf import descriptor +from google.protobuf import descriptor_database +from google.protobuf import descriptor_pool + + +class DescriptorPoolTest(unittest.TestCase): + + def setUp(self): + self.pool = descriptor_pool.DescriptorPool() + self.factory_test1_fd = descriptor_pb2.FileDescriptorProto.FromString( + factory_test1_pb2.DESCRIPTOR.serialized_pb) + self.factory_test2_fd = descriptor_pb2.FileDescriptorProto.FromString( + factory_test2_pb2.DESCRIPTOR.serialized_pb) + self.pool.Add(self.factory_test1_fd) + self.pool.Add(self.factory_test2_fd) + + def testFindFileByName(self): + name1 = 'net/proto2/python/internal/factory_test1.proto' + file_desc1 = self.pool.FindFileByName(name1) + self.assertIsInstance(file_desc1, descriptor.FileDescriptor) + self.assertEquals(name1, file_desc1.name) + self.assertEquals('net.proto2.python.internal', file_desc1.package) + self.assertIn('Factory1Message', file_desc1.message_types_by_name) + + name2 = 'net/proto2/python/internal/factory_test2.proto' + file_desc2 = self.pool.FindFileByName(name2) + self.assertIsInstance(file_desc2, descriptor.FileDescriptor) + self.assertEquals(name2, file_desc2.name) + self.assertEquals('net.proto2.python.internal', file_desc2.package) + self.assertIn('Factory2Message', file_desc2.message_types_by_name) + + def testFindFileByNameFailure(self): + try: + self.pool.FindFileByName('Does not exist') + self.fail('Expected KeyError') + except KeyError: + pass + + def testFindFileContainingSymbol(self): + file_desc1 = self.pool.FindFileContainingSymbol( + 'net.proto2.python.internal.Factory1Message') + self.assertIsInstance(file_desc1, descriptor.FileDescriptor) + self.assertEquals('net/proto2/python/internal/factory_test1.proto', + file_desc1.name) + self.assertEquals('net.proto2.python.internal', file_desc1.package) + self.assertIn('Factory1Message', file_desc1.message_types_by_name) + + file_desc2 = self.pool.FindFileContainingSymbol( + 'net.proto2.python.internal.Factory2Message') + self.assertIsInstance(file_desc2, descriptor.FileDescriptor) + self.assertEquals('net/proto2/python/internal/factory_test2.proto', + file_desc2.name) + self.assertEquals('net.proto2.python.internal', file_desc2.package) + self.assertIn('Factory2Message', file_desc2.message_types_by_name) + + def testFindFileContainingSymbolFailure(self): + try: + self.pool.FindFileContainingSymbol('Does not exist') + self.fail('Expected KeyError') + except KeyError: + pass + + def testFindMessageTypeByName(self): + msg1 = self.pool.FindMessageTypeByName( + 'net.proto2.python.internal.Factory1Message') + self.assertIsInstance(msg1, descriptor.Descriptor) + self.assertEquals('Factory1Message', msg1.name) + self.assertEquals('net.proto2.python.internal.Factory1Message', + msg1.full_name) + self.assertEquals(None, msg1.containing_type) + + nested_msg1 = msg1.nested_types[0] + self.assertEquals('NestedFactory1Message', nested_msg1.name) + self.assertEquals(msg1, nested_msg1.containing_type) + + nested_enum1 = msg1.enum_types[0] + self.assertEquals('NestedFactory1Enum', nested_enum1.name) + self.assertEquals(msg1, nested_enum1.containing_type) + + self.assertEquals(nested_msg1, msg1.fields_by_name[ + 'nested_factory_1_message'].message_type) + self.assertEquals(nested_enum1, msg1.fields_by_name[ + 'nested_factory_1_enum'].enum_type) + + msg2 = self.pool.FindMessageTypeByName( + 'net.proto2.python.internal.Factory2Message') + self.assertIsInstance(msg2, descriptor.Descriptor) + self.assertEquals('Factory2Message', msg2.name) + self.assertEquals('net.proto2.python.internal.Factory2Message', + msg2.full_name) + self.assertIsNone(msg2.containing_type) + + nested_msg2 = msg2.nested_types[0] + self.assertEquals('NestedFactory2Message', nested_msg2.name) + self.assertEquals(msg2, nested_msg2.containing_type) + + nested_enum2 = msg2.enum_types[0] + self.assertEquals('NestedFactory2Enum', nested_enum2.name) + self.assertEquals(msg2, nested_enum2.containing_type) + + self.assertEquals(nested_msg2, msg2.fields_by_name[ + 'nested_factory_2_message'].message_type) + self.assertEquals(nested_enum2, msg2.fields_by_name[ + 'nested_factory_2_enum'].enum_type) + + self.assertTrue(msg2.fields_by_name['int_with_default'].has_default) + self.assertEquals( + 1776, msg2.fields_by_name['int_with_default'].default_value) + + self.assertTrue(msg2.fields_by_name['double_with_default'].has_default) + self.assertEquals( + 9.99, msg2.fields_by_name['double_with_default'].default_value) + + self.assertTrue(msg2.fields_by_name['string_with_default'].has_default) + self.assertEquals( + 'hello world', msg2.fields_by_name['string_with_default'].default_value) + + self.assertTrue(msg2.fields_by_name['bool_with_default'].has_default) + self.assertFalse(msg2.fields_by_name['bool_with_default'].default_value) + + self.assertTrue(msg2.fields_by_name['enum_with_default'].has_default) + self.assertEquals( + 1, msg2.fields_by_name['enum_with_default'].default_value) + + msg3 = self.pool.FindMessageTypeByName( + 'net.proto2.python.internal.Factory2Message.NestedFactory2Message') + self.assertEquals(nested_msg2, msg3) + + def testFindMessageTypeByNameFailure(self): + try: + self.pool.FindMessageTypeByName('Does not exist') + self.fail('Expected KeyError') + except KeyError: + pass + + def testFindEnumTypeByName(self): + enum1 = self.pool.FindEnumTypeByName( + 'net.proto2.python.internal.Factory1Enum') + self.assertIsInstance(enum1, descriptor.EnumDescriptor) + self.assertEquals(0, enum1.values_by_name['FACTORY_1_VALUE_0'].number) + self.assertEquals(1, enum1.values_by_name['FACTORY_1_VALUE_1'].number) + + nested_enum1 = self.pool.FindEnumTypeByName( + 'net.proto2.python.internal.Factory1Message.NestedFactory1Enum') + self.assertIsInstance(nested_enum1, descriptor.EnumDescriptor) + self.assertEquals( + 0, nested_enum1.values_by_name['NESTED_FACTORY_1_VALUE_0'].number) + self.assertEquals( + 1, nested_enum1.values_by_name['NESTED_FACTORY_1_VALUE_1'].number) + + enum2 = self.pool.FindEnumTypeByName( + 'net.proto2.python.internal.Factory2Enum') + self.assertIsInstance(enum2, descriptor.EnumDescriptor) + self.assertEquals(0, enum2.values_by_name['FACTORY_2_VALUE_0'].number) + self.assertEquals(1, enum2.values_by_name['FACTORY_2_VALUE_1'].number) + + nested_enum2 = self.pool.FindEnumTypeByName( + 'net.proto2.python.internal.Factory2Message.NestedFactory2Enum') + self.assertIsInstance(nested_enum2, descriptor.EnumDescriptor) + self.assertEquals( + 0, nested_enum2.values_by_name['NESTED_FACTORY_2_VALUE_0'].number) + self.assertEquals( + 1, nested_enum2.values_by_name['NESTED_FACTORY_2_VALUE_1'].number) + + def testFindEnumTypeByNameFailure(self): + try: + self.pool.FindEnumTypeByName('Does not exist') + self.fail('Expected KeyError') + except KeyError: + pass + + def testUserDefinedDB(self): + db = descriptor_database.DescriptorDatabase() + self.pool = descriptor_pool.DescriptorPool(db) + db.Add(self.factory_test1_fd) + db.Add(self.factory_test2_fd) + self.testFindMessageTypeByName() + +if __name__ == '__main__': + unittest.main() diff --git a/code/push/google/protobuf/internal/descriptor_test.py b/code/push/google/protobuf/internal/descriptor_test.py new file mode 100644 index 0000000..c74f882 --- /dev/null +++ b/code/push/google/protobuf/internal/descriptor_test.py @@ -0,0 +1,613 @@ +#! /usr/bin/python +# +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Unittest for google.protobuf.internal.descriptor.""" + +__author__ = 'robinson@google.com (Will Robinson)' + +import unittest +from google.protobuf import unittest_custom_options_pb2 +from google.protobuf import unittest_import_pb2 +from google.protobuf import unittest_pb2 +from google.protobuf import descriptor_pb2 +from google.protobuf import descriptor +from google.protobuf import text_format + + +TEST_EMPTY_MESSAGE_DESCRIPTOR_ASCII = """ +name: 'TestEmptyMessage' +""" + + +class DescriptorTest(unittest.TestCase): + + def setUp(self): + self.my_file = descriptor.FileDescriptor( + name='some/filename/some.proto', + package='protobuf_unittest' + ) + self.my_enum = descriptor.EnumDescriptor( + name='ForeignEnum', + full_name='protobuf_unittest.ForeignEnum', + filename=None, + file=self.my_file, + values=[ + descriptor.EnumValueDescriptor(name='FOREIGN_FOO', index=0, number=4), + descriptor.EnumValueDescriptor(name='FOREIGN_BAR', index=1, number=5), + descriptor.EnumValueDescriptor(name='FOREIGN_BAZ', index=2, number=6), + ]) + self.my_message = descriptor.Descriptor( + name='NestedMessage', + full_name='protobuf_unittest.TestAllTypes.NestedMessage', + filename=None, + file=self.my_file, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='bb', + full_name='protobuf_unittest.TestAllTypes.NestedMessage.bb', + index=0, number=1, + type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None), + ], + nested_types=[], + enum_types=[ + self.my_enum, + ], + extensions=[]) + self.my_method = descriptor.MethodDescriptor( + name='Bar', + full_name='protobuf_unittest.TestService.Bar', + index=0, + containing_service=None, + input_type=None, + output_type=None) + self.my_service = descriptor.ServiceDescriptor( + name='TestServiceWithOptions', + full_name='protobuf_unittest.TestServiceWithOptions', + file=self.my_file, + index=0, + methods=[ + self.my_method + ]) + + def testEnumValueName(self): + self.assertEqual(self.my_message.EnumValueName('ForeignEnum', 4), + 'FOREIGN_FOO') + + self.assertEqual( + self.my_message.enum_types_by_name[ + 'ForeignEnum'].values_by_number[4].name, + self.my_message.EnumValueName('ForeignEnum', 4)) + + def testEnumFixups(self): + self.assertEqual(self.my_enum, self.my_enum.values[0].type) + + def testContainingTypeFixups(self): + self.assertEqual(self.my_message, self.my_message.fields[0].containing_type) + self.assertEqual(self.my_message, self.my_enum.containing_type) + + def testContainingServiceFixups(self): + self.assertEqual(self.my_service, self.my_method.containing_service) + + def testGetOptions(self): + self.assertEqual(self.my_enum.GetOptions(), + descriptor_pb2.EnumOptions()) + self.assertEqual(self.my_enum.values[0].GetOptions(), + descriptor_pb2.EnumValueOptions()) + self.assertEqual(self.my_message.GetOptions(), + descriptor_pb2.MessageOptions()) + self.assertEqual(self.my_message.fields[0].GetOptions(), + descriptor_pb2.FieldOptions()) + self.assertEqual(self.my_method.GetOptions(), + descriptor_pb2.MethodOptions()) + self.assertEqual(self.my_service.GetOptions(), + descriptor_pb2.ServiceOptions()) + + def testSimpleCustomOptions(self): + file_descriptor = unittest_custom_options_pb2.DESCRIPTOR + message_descriptor =\ + unittest_custom_options_pb2.TestMessageWithCustomOptions.DESCRIPTOR + field_descriptor = message_descriptor.fields_by_name["field1"] + enum_descriptor = message_descriptor.enum_types_by_name["AnEnum"] + enum_value_descriptor =\ + message_descriptor.enum_values_by_name["ANENUM_VAL2"] + service_descriptor =\ + unittest_custom_options_pb2.TestServiceWithCustomOptions.DESCRIPTOR + method_descriptor = service_descriptor.FindMethodByName("Foo") + + file_options = file_descriptor.GetOptions() + file_opt1 = unittest_custom_options_pb2.file_opt1 + self.assertEqual(9876543210, file_options.Extensions[file_opt1]) + message_options = message_descriptor.GetOptions() + message_opt1 = unittest_custom_options_pb2.message_opt1 + self.assertEqual(-56, message_options.Extensions[message_opt1]) + field_options = field_descriptor.GetOptions() + field_opt1 = unittest_custom_options_pb2.field_opt1 + self.assertEqual(8765432109, field_options.Extensions[field_opt1]) + field_opt2 = unittest_custom_options_pb2.field_opt2 + self.assertEqual(42, field_options.Extensions[field_opt2]) + enum_options = enum_descriptor.GetOptions() + enum_opt1 = unittest_custom_options_pb2.enum_opt1 + self.assertEqual(-789, enum_options.Extensions[enum_opt1]) + enum_value_options = enum_value_descriptor.GetOptions() + enum_value_opt1 = unittest_custom_options_pb2.enum_value_opt1 + self.assertEqual(123, enum_value_options.Extensions[enum_value_opt1]) + + service_options = service_descriptor.GetOptions() + service_opt1 = unittest_custom_options_pb2.service_opt1 + self.assertEqual(-9876543210, service_options.Extensions[service_opt1]) + method_options = method_descriptor.GetOptions() + method_opt1 = unittest_custom_options_pb2.method_opt1 + self.assertEqual(unittest_custom_options_pb2.METHODOPT1_VAL2, + method_options.Extensions[method_opt1]) + + def testDifferentCustomOptionTypes(self): + kint32min = -2**31 + kint64min = -2**63 + kint32max = 2**31 - 1 + kint64max = 2**63 - 1 + kuint32max = 2**32 - 1 + kuint64max = 2**64 - 1 + + message_descriptor =\ + unittest_custom_options_pb2.CustomOptionMinIntegerValues.DESCRIPTOR + message_options = message_descriptor.GetOptions() + self.assertEqual(False, message_options.Extensions[ + unittest_custom_options_pb2.bool_opt]) + self.assertEqual(kint32min, message_options.Extensions[ + unittest_custom_options_pb2.int32_opt]) + self.assertEqual(kint64min, message_options.Extensions[ + unittest_custom_options_pb2.int64_opt]) + self.assertEqual(0, message_options.Extensions[ + unittest_custom_options_pb2.uint32_opt]) + self.assertEqual(0, message_options.Extensions[ + unittest_custom_options_pb2.uint64_opt]) + self.assertEqual(kint32min, message_options.Extensions[ + unittest_custom_options_pb2.sint32_opt]) + self.assertEqual(kint64min, message_options.Extensions[ + unittest_custom_options_pb2.sint64_opt]) + self.assertEqual(0, message_options.Extensions[ + unittest_custom_options_pb2.fixed32_opt]) + self.assertEqual(0, message_options.Extensions[ + unittest_custom_options_pb2.fixed64_opt]) + self.assertEqual(kint32min, message_options.Extensions[ + unittest_custom_options_pb2.sfixed32_opt]) + self.assertEqual(kint64min, message_options.Extensions[ + unittest_custom_options_pb2.sfixed64_opt]) + + message_descriptor =\ + unittest_custom_options_pb2.CustomOptionMaxIntegerValues.DESCRIPTOR + message_options = message_descriptor.GetOptions() + self.assertEqual(True, message_options.Extensions[ + unittest_custom_options_pb2.bool_opt]) + self.assertEqual(kint32max, message_options.Extensions[ + unittest_custom_options_pb2.int32_opt]) + self.assertEqual(kint64max, message_options.Extensions[ + unittest_custom_options_pb2.int64_opt]) + self.assertEqual(kuint32max, message_options.Extensions[ + unittest_custom_options_pb2.uint32_opt]) + self.assertEqual(kuint64max, message_options.Extensions[ + unittest_custom_options_pb2.uint64_opt]) + self.assertEqual(kint32max, message_options.Extensions[ + unittest_custom_options_pb2.sint32_opt]) + self.assertEqual(kint64max, message_options.Extensions[ + unittest_custom_options_pb2.sint64_opt]) + self.assertEqual(kuint32max, message_options.Extensions[ + unittest_custom_options_pb2.fixed32_opt]) + self.assertEqual(kuint64max, message_options.Extensions[ + unittest_custom_options_pb2.fixed64_opt]) + self.assertEqual(kint32max, message_options.Extensions[ + unittest_custom_options_pb2.sfixed32_opt]) + self.assertEqual(kint64max, message_options.Extensions[ + unittest_custom_options_pb2.sfixed64_opt]) + + message_descriptor =\ + unittest_custom_options_pb2.CustomOptionOtherValues.DESCRIPTOR + message_options = message_descriptor.GetOptions() + self.assertEqual(-100, message_options.Extensions[ + unittest_custom_options_pb2.int32_opt]) + self.assertAlmostEqual(12.3456789, message_options.Extensions[ + unittest_custom_options_pb2.float_opt], 6) + self.assertAlmostEqual(1.234567890123456789, message_options.Extensions[ + unittest_custom_options_pb2.double_opt]) + self.assertEqual("Hello, \"World\"", message_options.Extensions[ + unittest_custom_options_pb2.string_opt]) + self.assertEqual("Hello\0World", message_options.Extensions[ + unittest_custom_options_pb2.bytes_opt]) + dummy_enum = unittest_custom_options_pb2.DummyMessageContainingEnum + self.assertEqual( + dummy_enum.TEST_OPTION_ENUM_TYPE2, + message_options.Extensions[unittest_custom_options_pb2.enum_opt]) + + message_descriptor =\ + unittest_custom_options_pb2.SettingRealsFromPositiveInts.DESCRIPTOR + message_options = message_descriptor.GetOptions() + self.assertAlmostEqual(12, message_options.Extensions[ + unittest_custom_options_pb2.float_opt], 6) + self.assertAlmostEqual(154, message_options.Extensions[ + unittest_custom_options_pb2.double_opt]) + + message_descriptor =\ + unittest_custom_options_pb2.SettingRealsFromNegativeInts.DESCRIPTOR + message_options = message_descriptor.GetOptions() + self.assertAlmostEqual(-12, message_options.Extensions[ + unittest_custom_options_pb2.float_opt], 6) + self.assertAlmostEqual(-154, message_options.Extensions[ + unittest_custom_options_pb2.double_opt]) + + def testComplexExtensionOptions(self): + descriptor =\ + unittest_custom_options_pb2.VariousComplexOptions.DESCRIPTOR + options = descriptor.GetOptions() + self.assertEqual(42, options.Extensions[ + unittest_custom_options_pb2.complex_opt1].foo) + self.assertEqual(324, options.Extensions[ + unittest_custom_options_pb2.complex_opt1].Extensions[ + unittest_custom_options_pb2.quux]) + self.assertEqual(876, options.Extensions[ + unittest_custom_options_pb2.complex_opt1].Extensions[ + unittest_custom_options_pb2.corge].qux) + self.assertEqual(987, options.Extensions[ + unittest_custom_options_pb2.complex_opt2].baz) + self.assertEqual(654, options.Extensions[ + unittest_custom_options_pb2.complex_opt2].Extensions[ + unittest_custom_options_pb2.grault]) + self.assertEqual(743, options.Extensions[ + unittest_custom_options_pb2.complex_opt2].bar.foo) + self.assertEqual(1999, options.Extensions[ + unittest_custom_options_pb2.complex_opt2].bar.Extensions[ + unittest_custom_options_pb2.quux]) + self.assertEqual(2008, options.Extensions[ + unittest_custom_options_pb2.complex_opt2].bar.Extensions[ + unittest_custom_options_pb2.corge].qux) + self.assertEqual(741, options.Extensions[ + unittest_custom_options_pb2.complex_opt2].Extensions[ + unittest_custom_options_pb2.garply].foo) + self.assertEqual(1998, options.Extensions[ + unittest_custom_options_pb2.complex_opt2].Extensions[ + unittest_custom_options_pb2.garply].Extensions[ + unittest_custom_options_pb2.quux]) + self.assertEqual(2121, options.Extensions[ + unittest_custom_options_pb2.complex_opt2].Extensions[ + unittest_custom_options_pb2.garply].Extensions[ + unittest_custom_options_pb2.corge].qux) + self.assertEqual(1971, options.Extensions[ + unittest_custom_options_pb2.ComplexOptionType2 + .ComplexOptionType4.complex_opt4].waldo) + self.assertEqual(321, options.Extensions[ + unittest_custom_options_pb2.complex_opt2].fred.waldo) + self.assertEqual(9, options.Extensions[ + unittest_custom_options_pb2.complex_opt3].qux) + self.assertEqual(22, options.Extensions[ + unittest_custom_options_pb2.complex_opt3].complexoptiontype5.plugh) + self.assertEqual(24, options.Extensions[ + unittest_custom_options_pb2.complexopt6].xyzzy) + + # Check that aggregate options were parsed and saved correctly in + # the appropriate descriptors. + def testAggregateOptions(self): + file_descriptor = unittest_custom_options_pb2.DESCRIPTOR + message_descriptor =\ + unittest_custom_options_pb2.AggregateMessage.DESCRIPTOR + field_descriptor = message_descriptor.fields_by_name["fieldname"] + enum_descriptor = unittest_custom_options_pb2.AggregateEnum.DESCRIPTOR + enum_value_descriptor = enum_descriptor.values_by_name["VALUE"] + service_descriptor =\ + unittest_custom_options_pb2.AggregateService.DESCRIPTOR + method_descriptor = service_descriptor.FindMethodByName("Method") + + # Tests for the different types of data embedded in fileopt + file_options = file_descriptor.GetOptions().Extensions[ + unittest_custom_options_pb2.fileopt] + self.assertEqual(100, file_options.i) + self.assertEqual("FileAnnotation", file_options.s) + self.assertEqual("NestedFileAnnotation", file_options.sub.s) + self.assertEqual("FileExtensionAnnotation", file_options.file.Extensions[ + unittest_custom_options_pb2.fileopt].s) + self.assertEqual("EmbeddedMessageSetElement", file_options.mset.Extensions[ + unittest_custom_options_pb2.AggregateMessageSetElement + .message_set_extension].s) + + # Simple tests for all the other types of annotations + self.assertEqual( + "MessageAnnotation", + message_descriptor.GetOptions().Extensions[ + unittest_custom_options_pb2.msgopt].s) + self.assertEqual( + "FieldAnnotation", + field_descriptor.GetOptions().Extensions[ + unittest_custom_options_pb2.fieldopt].s) + self.assertEqual( + "EnumAnnotation", + enum_descriptor.GetOptions().Extensions[ + unittest_custom_options_pb2.enumopt].s) + self.assertEqual( + "EnumValueAnnotation", + enum_value_descriptor.GetOptions().Extensions[ + unittest_custom_options_pb2.enumvalopt].s) + self.assertEqual( + "ServiceAnnotation", + service_descriptor.GetOptions().Extensions[ + unittest_custom_options_pb2.serviceopt].s) + self.assertEqual( + "MethodAnnotation", + method_descriptor.GetOptions().Extensions[ + unittest_custom_options_pb2.methodopt].s) + + def testNestedOptions(self): + nested_message =\ + unittest_custom_options_pb2.NestedOptionType.NestedMessage.DESCRIPTOR + self.assertEqual(1001, nested_message.GetOptions().Extensions[ + unittest_custom_options_pb2.message_opt1]) + nested_field = nested_message.fields_by_name["nested_field"] + self.assertEqual(1002, nested_field.GetOptions().Extensions[ + unittest_custom_options_pb2.field_opt1]) + outer_message =\ + unittest_custom_options_pb2.NestedOptionType.DESCRIPTOR + nested_enum = outer_message.enum_types_by_name["NestedEnum"] + self.assertEqual(1003, nested_enum.GetOptions().Extensions[ + unittest_custom_options_pb2.enum_opt1]) + nested_enum_value = outer_message.enum_values_by_name["NESTED_ENUM_VALUE"] + self.assertEqual(1004, nested_enum_value.GetOptions().Extensions[ + unittest_custom_options_pb2.enum_value_opt1]) + nested_extension = outer_message.extensions_by_name["nested_extension"] + self.assertEqual(1005, nested_extension.GetOptions().Extensions[ + unittest_custom_options_pb2.field_opt2]) + + def testFileDescriptorReferences(self): + self.assertEqual(self.my_enum.file, self.my_file) + self.assertEqual(self.my_message.file, self.my_file) + + def testFileDescriptor(self): + self.assertEqual(self.my_file.name, 'some/filename/some.proto') + self.assertEqual(self.my_file.package, 'protobuf_unittest') + + +class DescriptorCopyToProtoTest(unittest.TestCase): + """Tests for CopyTo functions of Descriptor.""" + + def _AssertProtoEqual(self, actual_proto, expected_class, expected_ascii): + expected_proto = expected_class() + text_format.Merge(expected_ascii, expected_proto) + + self.assertEqual( + actual_proto, expected_proto, + 'Not equal,\nActual:\n%s\nExpected:\n%s\n' + % (str(actual_proto), str(expected_proto))) + + def _InternalTestCopyToProto(self, desc, expected_proto_class, + expected_proto_ascii): + actual = expected_proto_class() + desc.CopyToProto(actual) + self._AssertProtoEqual( + actual, expected_proto_class, expected_proto_ascii) + + def testCopyToProto_EmptyMessage(self): + self._InternalTestCopyToProto( + unittest_pb2.TestEmptyMessage.DESCRIPTOR, + descriptor_pb2.DescriptorProto, + TEST_EMPTY_MESSAGE_DESCRIPTOR_ASCII) + + def testCopyToProto_NestedMessage(self): + TEST_NESTED_MESSAGE_ASCII = """ + name: 'NestedMessage' + field: < + name: 'bb' + number: 1 + label: 1 # Optional + type: 5 # TYPE_INT32 + > + """ + + self._InternalTestCopyToProto( + unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR, + descriptor_pb2.DescriptorProto, + TEST_NESTED_MESSAGE_ASCII) + + def testCopyToProto_ForeignNestedMessage(self): + TEST_FOREIGN_NESTED_ASCII = """ + name: 'TestForeignNested' + field: < + name: 'foreign_nested' + number: 1 + label: 1 # Optional + type: 11 # TYPE_MESSAGE + type_name: '.protobuf_unittest.TestAllTypes.NestedMessage' + > + """ + + self._InternalTestCopyToProto( + unittest_pb2.TestForeignNested.DESCRIPTOR, + descriptor_pb2.DescriptorProto, + TEST_FOREIGN_NESTED_ASCII) + + def testCopyToProto_ForeignEnum(self): + TEST_FOREIGN_ENUM_ASCII = """ + name: 'ForeignEnum' + value: < + name: 'FOREIGN_FOO' + number: 4 + > + value: < + name: 'FOREIGN_BAR' + number: 5 + > + value: < + name: 'FOREIGN_BAZ' + number: 6 + > + """ + + self._InternalTestCopyToProto( + unittest_pb2._FOREIGNENUM, + descriptor_pb2.EnumDescriptorProto, + TEST_FOREIGN_ENUM_ASCII) + + def testCopyToProto_Options(self): + TEST_DEPRECATED_FIELDS_ASCII = """ + name: 'TestDeprecatedFields' + field: < + name: 'deprecated_int32' + number: 1 + label: 1 # Optional + type: 5 # TYPE_INT32 + options: < + deprecated: true + > + > + """ + + self._InternalTestCopyToProto( + unittest_pb2.TestDeprecatedFields.DESCRIPTOR, + descriptor_pb2.DescriptorProto, + TEST_DEPRECATED_FIELDS_ASCII) + + def testCopyToProto_AllExtensions(self): + TEST_EMPTY_MESSAGE_WITH_EXTENSIONS_ASCII = """ + name: 'TestEmptyMessageWithExtensions' + extension_range: < + start: 1 + end: 536870912 + > + """ + + self._InternalTestCopyToProto( + unittest_pb2.TestEmptyMessageWithExtensions.DESCRIPTOR, + descriptor_pb2.DescriptorProto, + TEST_EMPTY_MESSAGE_WITH_EXTENSIONS_ASCII) + + def testCopyToProto_SeveralExtensions(self): + TEST_MESSAGE_WITH_SEVERAL_EXTENSIONS_ASCII = """ + name: 'TestMultipleExtensionRanges' + extension_range: < + start: 42 + end: 43 + > + extension_range: < + start: 4143 + end: 4244 + > + extension_range: < + start: 65536 + end: 536870912 + > + """ + + self._InternalTestCopyToProto( + unittest_pb2.TestMultipleExtensionRanges.DESCRIPTOR, + descriptor_pb2.DescriptorProto, + TEST_MESSAGE_WITH_SEVERAL_EXTENSIONS_ASCII) + + def testCopyToProto_FileDescriptor(self): + UNITTEST_IMPORT_FILE_DESCRIPTOR_ASCII = (""" + name: 'google/protobuf/unittest_import.proto' + package: 'protobuf_unittest_import' + dependency: 'google/protobuf/unittest_import_public.proto' + message_type: < + name: 'ImportMessage' + field: < + name: 'd' + number: 1 + label: 1 # Optional + type: 5 # TYPE_INT32 + > + > + """ + + """enum_type: < + name: 'ImportEnum' + value: < + name: 'IMPORT_FOO' + number: 7 + > + value: < + name: 'IMPORT_BAR' + number: 8 + > + value: < + name: 'IMPORT_BAZ' + number: 9 + > + > + options: < + java_package: 'com.google.protobuf.test' + optimize_for: 1 # SPEED + > + public_dependency: 0 + """) + + self._InternalTestCopyToProto( + unittest_import_pb2.DESCRIPTOR, + descriptor_pb2.FileDescriptorProto, + UNITTEST_IMPORT_FILE_DESCRIPTOR_ASCII) + + def testCopyToProto_ServiceDescriptor(self): + TEST_SERVICE_ASCII = """ + name: 'TestService' + method: < + name: 'Foo' + input_type: '.protobuf_unittest.FooRequest' + output_type: '.protobuf_unittest.FooResponse' + > + method: < + name: 'Bar' + input_type: '.protobuf_unittest.BarRequest' + output_type: '.protobuf_unittest.BarResponse' + > + """ + + self._InternalTestCopyToProto( + unittest_pb2.TestService.DESCRIPTOR, + descriptor_pb2.ServiceDescriptorProto, + TEST_SERVICE_ASCII) + + +class MakeDescriptorTest(unittest.TestCase): + def testMakeDescriptorWithUnsignedIntField(self): + file_descriptor_proto = descriptor_pb2.FileDescriptorProto() + file_descriptor_proto.name = 'Foo' + message_type = file_descriptor_proto.message_type.add() + message_type.name = file_descriptor_proto.name + field = message_type.field.add() + field.number = 1 + field.name = 'uint64_field' + field.label = descriptor.FieldDescriptor.LABEL_REQUIRED + field.type = descriptor.FieldDescriptor.TYPE_UINT64 + result = descriptor.MakeDescriptor(message_type) + self.assertEqual(result.fields[0].cpp_type, + descriptor.FieldDescriptor.CPPTYPE_UINT64) + + +if __name__ == '__main__': + unittest.main() diff --git a/code/push/google/protobuf/internal/encoder.py b/code/push/google/protobuf/internal/encoder.py new file mode 100644 index 0000000..8f624a1 --- /dev/null +++ b/code/push/google/protobuf/internal/encoder.py @@ -0,0 +1,769 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Code for encoding protocol message primitives. + +Contains the logic for encoding every logical protocol field type +into one of the 5 physical wire types. + +This code is designed to push the Python interpreter's performance to the +limits. + +The basic idea is that at startup time, for every field (i.e. every +FieldDescriptor) we construct two functions: a "sizer" and an "encoder". The +sizer takes a value of this field's type and computes its byte size. The +encoder takes a writer function and a value. It encodes the value into byte +strings and invokes the writer function to write those strings. Typically the +writer function is the write() method of a cStringIO. + +We try to do as much work as possible when constructing the writer and the +sizer rather than when calling them. In particular: +* We copy any needed global functions to local variables, so that we do not need + to do costly global table lookups at runtime. +* Similarly, we try to do any attribute lookups at startup time if possible. +* Every field's tag is encoded to bytes at startup, since it can't change at + runtime. +* Whatever component of the field size we can compute at startup, we do. +* We *avoid* sharing code if doing so would make the code slower and not sharing + does not burden us too much. For example, encoders for repeated fields do + not just call the encoders for singular fields in a loop because this would + add an extra function call overhead for every loop iteration; instead, we + manually inline the single-value encoder into the loop. +* If a Python function lacks a return statement, Python actually generates + instructions to pop the result of the last statement off the stack, push + None onto the stack, and then return that. If we really don't care what + value is returned, then we can save two instructions by returning the + result of the last statement. It looks funny but it helps. +* We assume that type and bounds checking has happened at a higher level. +""" + +__author__ = 'kenton@google.com (Kenton Varda)' + +import struct +from push.google.protobuf.internal import wire_format + + +# This will overflow and thus become IEEE-754 "infinity". We would use +# "float('inf')" but it doesn't work on Windows pre-Python-2.6. +_POS_INF = 1e10000 +_NEG_INF = -_POS_INF + + +def _VarintSize(value): + """Compute the size of a varint value.""" + if value <= 0x7f: return 1 + if value <= 0x3fff: return 2 + if value <= 0x1fffff: return 3 + if value <= 0xfffffff: return 4 + if value <= 0x7ffffffff: return 5 + if value <= 0x3ffffffffff: return 6 + if value <= 0x1ffffffffffff: return 7 + if value <= 0xffffffffffffff: return 8 + if value <= 0x7fffffffffffffff: return 9 + return 10 + + +def _SignedVarintSize(value): + """Compute the size of a signed varint value.""" + if value < 0: return 10 + if value <= 0x7f: return 1 + if value <= 0x3fff: return 2 + if value <= 0x1fffff: return 3 + if value <= 0xfffffff: return 4 + if value <= 0x7ffffffff: return 5 + if value <= 0x3ffffffffff: return 6 + if value <= 0x1ffffffffffff: return 7 + if value <= 0xffffffffffffff: return 8 + if value <= 0x7fffffffffffffff: return 9 + return 10 + + +def _TagSize(field_number): + """Returns the number of bytes required to serialize a tag with this field + number.""" + # Just pass in type 0, since the type won't affect the tag+type size. + return _VarintSize(wire_format.PackTag(field_number, 0)) + + +# -------------------------------------------------------------------- +# In this section we define some generic sizers. Each of these functions +# takes parameters specific to a particular field type, e.g. int32 or fixed64. +# It returns another function which in turn takes parameters specific to a +# particular field, e.g. the field number and whether it is repeated or packed. +# Look at the next section to see how these are used. + + +def _SimpleSizer(compute_value_size): + """A sizer which uses the function compute_value_size to compute the size of + each value. Typically compute_value_size is _VarintSize.""" + + def SpecificSizer(field_number, is_repeated, is_packed): + tag_size = _TagSize(field_number) + if is_packed: + local_VarintSize = _VarintSize + def PackedFieldSize(value): + result = 0 + for element in value: + result += compute_value_size(element) + return result + local_VarintSize(result) + tag_size + return PackedFieldSize + elif is_repeated: + def RepeatedFieldSize(value): + result = tag_size * len(value) + for element in value: + result += compute_value_size(element) + return result + return RepeatedFieldSize + else: + def FieldSize(value): + return tag_size + compute_value_size(value) + return FieldSize + + return SpecificSizer + + +def _ModifiedSizer(compute_value_size, modify_value): + """Like SimpleSizer, but modify_value is invoked on each value before it is + passed to compute_value_size. modify_value is typically ZigZagEncode.""" + + def SpecificSizer(field_number, is_repeated, is_packed): + tag_size = _TagSize(field_number) + if is_packed: + local_VarintSize = _VarintSize + def PackedFieldSize(value): + result = 0 + for element in value: + result += compute_value_size(modify_value(element)) + return result + local_VarintSize(result) + tag_size + return PackedFieldSize + elif is_repeated: + def RepeatedFieldSize(value): + result = tag_size * len(value) + for element in value: + result += compute_value_size(modify_value(element)) + return result + return RepeatedFieldSize + else: + def FieldSize(value): + return tag_size + compute_value_size(modify_value(value)) + return FieldSize + + return SpecificSizer + + +def _FixedSizer(value_size): + """Like _SimpleSizer except for a fixed-size field. The input is the size + of one value.""" + + def SpecificSizer(field_number, is_repeated, is_packed): + tag_size = _TagSize(field_number) + if is_packed: + local_VarintSize = _VarintSize + def PackedFieldSize(value): + result = len(value) * value_size + return result + local_VarintSize(result) + tag_size + return PackedFieldSize + elif is_repeated: + element_size = value_size + tag_size + def RepeatedFieldSize(value): + return len(value) * element_size + return RepeatedFieldSize + else: + field_size = value_size + tag_size + def FieldSize(value): + return field_size + return FieldSize + + return SpecificSizer + + +# ==================================================================== +# Here we declare a sizer constructor for each field type. Each "sizer +# constructor" is a function that takes (field_number, is_repeated, is_packed) +# as parameters and returns a sizer, which in turn takes a field value as +# a parameter and returns its encoded size. + + +Int32Sizer = Int64Sizer = EnumSizer = _SimpleSizer(_SignedVarintSize) + +UInt32Sizer = UInt64Sizer = _SimpleSizer(_VarintSize) + +SInt32Sizer = SInt64Sizer = _ModifiedSizer( + _SignedVarintSize, wire_format.ZigZagEncode) + +Fixed32Sizer = SFixed32Sizer = FloatSizer = _FixedSizer(4) +Fixed64Sizer = SFixed64Sizer = DoubleSizer = _FixedSizer(8) + +BoolSizer = _FixedSizer(1) + + +def StringSizer(field_number, is_repeated, is_packed): + """Returns a sizer for a string field.""" + + tag_size = _TagSize(field_number) + local_VarintSize = _VarintSize + local_len = len + assert not is_packed + if is_repeated: + def RepeatedFieldSize(value): + result = tag_size * len(value) + for element in value: + l = local_len(element.encode('utf-8')) + result += local_VarintSize(l) + l + return result + return RepeatedFieldSize + else: + def FieldSize(value): + l = local_len(value.encode('utf-8')) + return tag_size + local_VarintSize(l) + l + return FieldSize + + +def BytesSizer(field_number, is_repeated, is_packed): + """Returns a sizer for a bytes field.""" + + tag_size = _TagSize(field_number) + local_VarintSize = _VarintSize + local_len = len + assert not is_packed + if is_repeated: + def RepeatedFieldSize(value): + result = tag_size * len(value) + for element in value: + l = local_len(element) + result += local_VarintSize(l) + l + return result + return RepeatedFieldSize + else: + def FieldSize(value): + l = local_len(value) + return tag_size + local_VarintSize(l) + l + return FieldSize + + +def GroupSizer(field_number, is_repeated, is_packed): + """Returns a sizer for a group field.""" + + tag_size = _TagSize(field_number) * 2 + assert not is_packed + if is_repeated: + def RepeatedFieldSize(value): + result = tag_size * len(value) + for element in value: + result += element.ByteSize() + return result + return RepeatedFieldSize + else: + def FieldSize(value): + return tag_size + value.ByteSize() + return FieldSize + + +def MessageSizer(field_number, is_repeated, is_packed): + """Returns a sizer for a message field.""" + + tag_size = _TagSize(field_number) + local_VarintSize = _VarintSize + assert not is_packed + if is_repeated: + def RepeatedFieldSize(value): + result = tag_size * len(value) + for element in value: + l = element.ByteSize() + result += local_VarintSize(l) + l + return result + return RepeatedFieldSize + else: + def FieldSize(value): + l = value.ByteSize() + return tag_size + local_VarintSize(l) + l + return FieldSize + + +# -------------------------------------------------------------------- +# MessageSet is special. + + +def MessageSetItemSizer(field_number): + """Returns a sizer for extensions of MessageSet. + + The message set message looks like this: + message MessageSet { + repeated group Item = 1 { + required int32 type_id = 2; + required string message = 3; + } + } + """ + static_size = (_TagSize(1) * 2 + _TagSize(2) + _VarintSize(field_number) + + _TagSize(3)) + local_VarintSize = _VarintSize + + def FieldSize(value): + l = value.ByteSize() + return static_size + local_VarintSize(l) + l + + return FieldSize + + +# ==================================================================== +# Encoders! + + +def _VarintEncoder(): + """Return an encoder for a basic varint value (does not include tag).""" + + local_chr = chr + def EncodeVarint(write, value): + bits = value & 0x7f + value >>= 7 + while value: + write(local_chr(0x80|bits)) + bits = value & 0x7f + value >>= 7 + return write(local_chr(bits)) + + return EncodeVarint + + +def _SignedVarintEncoder(): + """Return an encoder for a basic signed varint value (does not include + tag).""" + + local_chr = chr + def EncodeSignedVarint(write, value): + if value < 0: + value += (1 << 64) + bits = value & 0x7f + value >>= 7 + while value: + write(local_chr(0x80|bits)) + bits = value & 0x7f + value >>= 7 + return write(local_chr(bits)) + + return EncodeSignedVarint + + +_EncodeVarint = _VarintEncoder() +_EncodeSignedVarint = _SignedVarintEncoder() + + +def _VarintBytes(value): + """Encode the given integer as a varint and return the bytes. This is only + called at startup time so it doesn't need to be fast.""" + + pieces = [] + _EncodeVarint(pieces.append, value) + return "".join(pieces) + + +def TagBytes(field_number, wire_type): + """Encode the given tag and return the bytes. Only called at startup.""" + + return _VarintBytes(wire_format.PackTag(field_number, wire_type)) + +# -------------------------------------------------------------------- +# As with sizers (see above), we have a number of common encoder +# implementations. + + +def _SimpleEncoder(wire_type, encode_value, compute_value_size): + """Return a constructor for an encoder for fields of a particular type. + + Args: + wire_type: The field's wire type, for encoding tags. + encode_value: A function which encodes an individual value, e.g. + _EncodeVarint(). + compute_value_size: A function which computes the size of an individual + value, e.g. _VarintSize(). + """ + + def SpecificEncoder(field_number, is_repeated, is_packed): + if is_packed: + tag_bytes = TagBytes(field_number, wire_format.WIRETYPE_LENGTH_DELIMITED) + local_EncodeVarint = _EncodeVarint + def EncodePackedField(write, value): + write(tag_bytes) + size = 0 + for element in value: + size += compute_value_size(element) + local_EncodeVarint(write, size) + for element in value: + encode_value(write, element) + return EncodePackedField + elif is_repeated: + tag_bytes = TagBytes(field_number, wire_type) + def EncodeRepeatedField(write, value): + for element in value: + write(tag_bytes) + encode_value(write, element) + return EncodeRepeatedField + else: + tag_bytes = TagBytes(field_number, wire_type) + def EncodeField(write, value): + write(tag_bytes) + return encode_value(write, value) + return EncodeField + + return SpecificEncoder + + +def _ModifiedEncoder(wire_type, encode_value, compute_value_size, modify_value): + """Like SimpleEncoder but additionally invokes modify_value on every value + before passing it to encode_value. Usually modify_value is ZigZagEncode.""" + + def SpecificEncoder(field_number, is_repeated, is_packed): + if is_packed: + tag_bytes = TagBytes(field_number, wire_format.WIRETYPE_LENGTH_DELIMITED) + local_EncodeVarint = _EncodeVarint + def EncodePackedField(write, value): + write(tag_bytes) + size = 0 + for element in value: + size += compute_value_size(modify_value(element)) + local_EncodeVarint(write, size) + for element in value: + encode_value(write, modify_value(element)) + return EncodePackedField + elif is_repeated: + tag_bytes = TagBytes(field_number, wire_type) + def EncodeRepeatedField(write, value): + for element in value: + write(tag_bytes) + encode_value(write, modify_value(element)) + return EncodeRepeatedField + else: + tag_bytes = TagBytes(field_number, wire_type) + def EncodeField(write, value): + write(tag_bytes) + return encode_value(write, modify_value(value)) + return EncodeField + + return SpecificEncoder + + +def _StructPackEncoder(wire_type, format): + """Return a constructor for an encoder for a fixed-width field. + + Args: + wire_type: The field's wire type, for encoding tags. + format: The format string to pass to struct.pack(). + """ + + value_size = struct.calcsize(format) + + def SpecificEncoder(field_number, is_repeated, is_packed): + local_struct_pack = struct.pack + if is_packed: + tag_bytes = TagBytes(field_number, wire_format.WIRETYPE_LENGTH_DELIMITED) + local_EncodeVarint = _EncodeVarint + def EncodePackedField(write, value): + write(tag_bytes) + local_EncodeVarint(write, len(value) * value_size) + for element in value: + write(local_struct_pack(format, element)) + return EncodePackedField + elif is_repeated: + tag_bytes = TagBytes(field_number, wire_type) + def EncodeRepeatedField(write, value): + for element in value: + write(tag_bytes) + write(local_struct_pack(format, element)) + return EncodeRepeatedField + else: + tag_bytes = TagBytes(field_number, wire_type) + def EncodeField(write, value): + write(tag_bytes) + return write(local_struct_pack(format, value)) + return EncodeField + + return SpecificEncoder + + +def _FloatingPointEncoder(wire_type, format): + """Return a constructor for an encoder for float fields. + + This is like StructPackEncoder, but catches errors that may be due to + passing non-finite floating-point values to struct.pack, and makes a + second attempt to encode those values. + + Args: + wire_type: The field's wire type, for encoding tags. + format: The format string to pass to struct.pack(). + """ + + value_size = struct.calcsize(format) + if value_size == 4: + def EncodeNonFiniteOrRaise(write, value): + # Remember that the serialized form uses little-endian byte order. + if value == _POS_INF: + write('\x00\x00\x80\x7F') + elif value == _NEG_INF: + write('\x00\x00\x80\xFF') + elif value != value: # NaN + write('\x00\x00\xC0\x7F') + else: + raise + elif value_size == 8: + def EncodeNonFiniteOrRaise(write, value): + if value == _POS_INF: + write('\x00\x00\x00\x00\x00\x00\xF0\x7F') + elif value == _NEG_INF: + write('\x00\x00\x00\x00\x00\x00\xF0\xFF') + elif value != value: # NaN + write('\x00\x00\x00\x00\x00\x00\xF8\x7F') + else: + raise + else: + raise ValueError('Can\'t encode floating-point values that are ' + '%d bytes long (only 4 or 8)' % value_size) + + def SpecificEncoder(field_number, is_repeated, is_packed): + local_struct_pack = struct.pack + if is_packed: + tag_bytes = TagBytes(field_number, wire_format.WIRETYPE_LENGTH_DELIMITED) + local_EncodeVarint = _EncodeVarint + def EncodePackedField(write, value): + write(tag_bytes) + local_EncodeVarint(write, len(value) * value_size) + for element in value: + # This try/except block is going to be faster than any code that + # we could write to check whether element is finite. + try: + write(local_struct_pack(format, element)) + except SystemError: + EncodeNonFiniteOrRaise(write, element) + return EncodePackedField + elif is_repeated: + tag_bytes = TagBytes(field_number, wire_type) + def EncodeRepeatedField(write, value): + for element in value: + write(tag_bytes) + try: + write(local_struct_pack(format, element)) + except SystemError: + EncodeNonFiniteOrRaise(write, element) + return EncodeRepeatedField + else: + tag_bytes = TagBytes(field_number, wire_type) + def EncodeField(write, value): + write(tag_bytes) + try: + write(local_struct_pack(format, value)) + except SystemError: + EncodeNonFiniteOrRaise(write, value) + return EncodeField + + return SpecificEncoder + + +# ==================================================================== +# Here we declare an encoder constructor for each field type. These work +# very similarly to sizer constructors, described earlier. + + +Int32Encoder = Int64Encoder = EnumEncoder = _SimpleEncoder( + wire_format.WIRETYPE_VARINT, _EncodeSignedVarint, _SignedVarintSize) + +UInt32Encoder = UInt64Encoder = _SimpleEncoder( + wire_format.WIRETYPE_VARINT, _EncodeVarint, _VarintSize) + +SInt32Encoder = SInt64Encoder = _ModifiedEncoder( + wire_format.WIRETYPE_VARINT, _EncodeVarint, _VarintSize, + wire_format.ZigZagEncode) + +# Note that Python conveniently guarantees that when using the '<' prefix on +# formats, they will also have the same size across all platforms (as opposed +# to without the prefix, where their sizes depend on the C compiler's basic +# type sizes). +Fixed32Encoder = _StructPackEncoder(wire_format.WIRETYPE_FIXED32, ' 0) + self.assertTrue(isinf(message.neg_inf_double)) + self.assertTrue(message.neg_inf_double < 0) + self.assertTrue(isnan(message.nan_double)) + + self.assertTrue(isinf(message.inf_float)) + self.assertTrue(message.inf_float > 0) + self.assertTrue(isinf(message.neg_inf_float)) + self.assertTrue(message.neg_inf_float < 0) + self.assertTrue(isnan(message.nan_float)) + self.assertEqual("? ? ?? ?? ??? ??/ ??-", message.cpp_trigraph) + + def testHasDefaultValues(self): + desc = unittest_pb2.TestAllTypes.DESCRIPTOR + + expected_has_default_by_name = { + 'optional_int32': False, + 'repeated_int32': False, + 'optional_nested_message': False, + 'default_int32': True, + } + + has_default_by_name = dict( + [(f.name, f.has_default_value) + for f in desc.fields + if f.name in expected_has_default_by_name]) + self.assertEqual(expected_has_default_by_name, has_default_by_name) + + def testContainingTypeBehaviorForExtensions(self): + self.assertEqual(unittest_pb2.optional_int32_extension.containing_type, + unittest_pb2.TestAllExtensions.DESCRIPTOR) + self.assertEqual(unittest_pb2.TestRequired.single.containing_type, + unittest_pb2.TestAllExtensions.DESCRIPTOR) + + def testExtensionScope(self): + self.assertEqual(unittest_pb2.optional_int32_extension.extension_scope, + None) + self.assertEqual(unittest_pb2.TestRequired.single.extension_scope, + unittest_pb2.TestRequired.DESCRIPTOR) + + def testIsExtension(self): + self.assertTrue(unittest_pb2.optional_int32_extension.is_extension) + self.assertTrue(unittest_pb2.TestRequired.single.is_extension) + + message_descriptor = unittest_pb2.TestRequired.DESCRIPTOR + non_extension_descriptor = message_descriptor.fields_by_name['a'] + self.assertTrue(not non_extension_descriptor.is_extension) + + def testOptions(self): + proto = unittest_mset_pb2.TestMessageSet() + self.assertTrue(proto.DESCRIPTOR.GetOptions().message_set_wire_format) + + def testMessageWithCustomOptions(self): + proto = unittest_custom_options_pb2.TestMessageWithCustomOptions() + enum_options = proto.DESCRIPTOR.enum_types_by_name['AnEnum'].GetOptions() + self.assertTrue(enum_options is not None) + # TODO(gps): We really should test for the presense of the enum_opt1 + # extension and for its value to be set to -789. + + def testNestedTypes(self): + self.assertEquals( + set(unittest_pb2.TestAllTypes.DESCRIPTOR.nested_types), + set([ + unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR, + unittest_pb2.TestAllTypes.OptionalGroup.DESCRIPTOR, + unittest_pb2.TestAllTypes.RepeatedGroup.DESCRIPTOR, + ])) + self.assertEqual(unittest_pb2.TestEmptyMessage.DESCRIPTOR.nested_types, []) + self.assertEqual( + unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR.nested_types, []) + + def testContainingType(self): + self.assertTrue( + unittest_pb2.TestEmptyMessage.DESCRIPTOR.containing_type is None) + self.assertTrue( + unittest_pb2.TestAllTypes.DESCRIPTOR.containing_type is None) + self.assertEqual( + unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR.containing_type, + unittest_pb2.TestAllTypes.DESCRIPTOR) + self.assertEqual( + unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR.containing_type, + unittest_pb2.TestAllTypes.DESCRIPTOR) + self.assertEqual( + unittest_pb2.TestAllTypes.RepeatedGroup.DESCRIPTOR.containing_type, + unittest_pb2.TestAllTypes.DESCRIPTOR) + + def testContainingTypeInEnumDescriptor(self): + self.assertTrue(unittest_pb2._FOREIGNENUM.containing_type is None) + self.assertEqual(unittest_pb2._TESTALLTYPES_NESTEDENUM.containing_type, + unittest_pb2.TestAllTypes.DESCRIPTOR) + + def testPackage(self): + self.assertEqual( + unittest_pb2.TestAllTypes.DESCRIPTOR.file.package, + 'protobuf_unittest') + desc = unittest_pb2.TestAllTypes.NestedMessage.DESCRIPTOR + self.assertEqual(desc.file.package, 'protobuf_unittest') + self.assertEqual( + unittest_import_pb2.ImportMessage.DESCRIPTOR.file.package, + 'protobuf_unittest_import') + + self.assertEqual( + unittest_pb2._FOREIGNENUM.file.package, 'protobuf_unittest') + self.assertEqual( + unittest_pb2._TESTALLTYPES_NESTEDENUM.file.package, + 'protobuf_unittest') + self.assertEqual( + unittest_import_pb2._IMPORTENUM.file.package, + 'protobuf_unittest_import') + + def testExtensionRange(self): + self.assertEqual( + unittest_pb2.TestAllTypes.DESCRIPTOR.extension_ranges, []) + self.assertEqual( + unittest_pb2.TestAllExtensions.DESCRIPTOR.extension_ranges, + [(1, MAX_EXTENSION)]) + self.assertEqual( + unittest_pb2.TestMultipleExtensionRanges.DESCRIPTOR.extension_ranges, + [(42, 43), (4143, 4244), (65536, MAX_EXTENSION)]) + + def testFileDescriptor(self): + self.assertEqual(unittest_pb2.DESCRIPTOR.name, + 'google/protobuf/unittest.proto') + self.assertEqual(unittest_pb2.DESCRIPTOR.package, 'protobuf_unittest') + self.assertFalse(unittest_pb2.DESCRIPTOR.serialized_pb is None) + + def testNoGenericServices(self): + self.assertTrue(hasattr(unittest_no_generic_services_pb2, "TestMessage")) + self.assertTrue(hasattr(unittest_no_generic_services_pb2, "FOO")) + self.assertTrue(hasattr(unittest_no_generic_services_pb2, "test_extension")) + + # Make sure unittest_no_generic_services_pb2 has no services subclassing + # Proto2 Service class. + if hasattr(unittest_no_generic_services_pb2, "TestService"): + self.assertFalse(issubclass(unittest_no_generic_services_pb2.TestService, + service.Service)) + + def testMessageTypesByName(self): + file_type = unittest_pb2.DESCRIPTOR + self.assertEqual( + unittest_pb2._TESTALLTYPES, + file_type.message_types_by_name[unittest_pb2._TESTALLTYPES.name]) + + # Nested messages shouldn't be included in the message_types_by_name + # dictionary (like in the C++ API). + self.assertFalse( + unittest_pb2._TESTALLTYPES_NESTEDMESSAGE.name in + file_type.message_types_by_name) + + def testPublicImports(self): + # Test public imports as embedded message. + all_type_proto = unittest_pb2.TestAllTypes() + self.assertEqual(0, all_type_proto.optional_public_import_message.e) + + # PublicImportMessage is actually defined in unittest_import_public_pb2 + # module, and is public imported by unittest_import_pb2 module. + public_import_proto = unittest_import_pb2.PublicImportMessage() + self.assertEqual(0, public_import_proto.e) + self.assertTrue(unittest_import_public_pb2.PublicImportMessage is + unittest_import_pb2.PublicImportMessage) + + def testBadIdentifiers(self): + # We're just testing that the code was imported without problems. + message = test_bad_identifiers_pb2.TestBadIdentifiers() + self.assertEqual(message.Extensions[test_bad_identifiers_pb2.message], + "foo") + self.assertEqual(message.Extensions[test_bad_identifiers_pb2.descriptor], + "bar") + self.assertEqual(message.Extensions[test_bad_identifiers_pb2.reflection], + "baz") + self.assertEqual(message.Extensions[test_bad_identifiers_pb2.service], + "qux") + +if __name__ == '__main__': + unittest.main() diff --git a/code/push/google/protobuf/internal/message_cpp_test.py b/code/push/google/protobuf/internal/message_cpp_test.py new file mode 100644 index 0000000..0d84b32 --- /dev/null +++ b/code/push/google/protobuf/internal/message_cpp_test.py @@ -0,0 +1,45 @@ +#! /usr/bin/python +# +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Tests for google.protobuf.internal.message_cpp.""" + +__author__ = 'shahms@google.com (Shahms King)' + +import os +os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'cpp' + +import unittest +from google.protobuf.internal.message_test import * + + +if __name__ == '__main__': + unittest.main() diff --git a/code/push/google/protobuf/internal/message_factory_test.py b/code/push/google/protobuf/internal/message_factory_test.py new file mode 100644 index 0000000..0bc9be9 --- /dev/null +++ b/code/push/google/protobuf/internal/message_factory_test.py @@ -0,0 +1,113 @@ +#! /usr/bin/python +# +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Tests for google.protobuf.message_factory.""" + +__author__ = 'matthewtoia@google.com (Matt Toia)' + +import unittest +from google.protobuf import descriptor_pb2 +from google.protobuf.internal import factory_test1_pb2 +from google.protobuf.internal import factory_test2_pb2 +from google.protobuf import descriptor_database +from google.protobuf import descriptor_pool +from google.protobuf import message_factory + + +class MessageFactoryTest(unittest.TestCase): + + def setUp(self): + self.factory_test1_fd = descriptor_pb2.FileDescriptorProto.FromString( + factory_test1_pb2.DESCRIPTOR.serialized_pb) + self.factory_test2_fd = descriptor_pb2.FileDescriptorProto.FromString( + factory_test2_pb2.DESCRIPTOR.serialized_pb) + + def _ExerciseDynamicClass(self, cls): + msg = cls() + msg.mandatory = 42 + msg.nested_factory_2_enum = 0 + msg.nested_factory_2_message.value = 'nested message value' + msg.factory_1_message.factory_1_enum = 1 + msg.factory_1_message.nested_factory_1_enum = 0 + msg.factory_1_message.nested_factory_1_message.value = ( + 'nested message value') + msg.factory_1_message.scalar_value = 22 + msg.factory_1_message.list_value.extend(['one', 'two', 'three']) + msg.factory_1_message.list_value.append('four') + msg.factory_1_enum = 1 + msg.nested_factory_1_enum = 0 + msg.nested_factory_1_message.value = 'nested message value' + msg.circular_message.mandatory = 1 + msg.circular_message.circular_message.mandatory = 2 + msg.circular_message.scalar_value = 'one deep' + msg.scalar_value = 'zero deep' + msg.list_value.extend(['four', 'three', 'two']) + msg.list_value.append('one') + msg.grouped.add() + msg.grouped[0].part_1 = 'hello' + msg.grouped[0].part_2 = 'world' + msg.grouped.add(part_1='testing', part_2='123') + msg.loop.loop.mandatory = 2 + msg.loop.loop.loop.loop.mandatory = 4 + serialized = msg.SerializeToString() + converted = factory_test2_pb2.Factory2Message.FromString(serialized) + reserialized = converted.SerializeToString() + self.assertEquals(serialized, reserialized) + result = cls.FromString(reserialized) + self.assertEquals(msg, result) + + def testGetPrototype(self): + db = descriptor_database.DescriptorDatabase() + pool = descriptor_pool.DescriptorPool(db) + db.Add(self.factory_test1_fd) + db.Add(self.factory_test2_fd) + factory = message_factory.MessageFactory() + cls = factory.GetPrototype(pool.FindMessageTypeByName( + 'net.proto2.python.internal.Factory2Message')) + self.assertIsNot(cls, factory_test2_pb2.Factory2Message) + self._ExerciseDynamicClass(cls) + cls2 = factory.GetPrototype(pool.FindMessageTypeByName( + 'net.proto2.python.internal.Factory2Message')) + self.assertIs(cls, cls2) + + def testGetMessages(self): + messages = message_factory.GetMessages([self.factory_test2_fd, + self.factory_test1_fd]) + self.assertContainsSubset( + ['net.proto2.python.internal.Factory2Message', + 'net.proto2.python.internal.Factory1Message'], + messages.keys()) + self._ExerciseDynamicClass( + messages['net.proto2.python.internal.Factory2Message']) + +if __name__ == '__main__': + unittest.main() diff --git a/code/push/google/protobuf/internal/message_listener.py b/code/push/google/protobuf/internal/message_listener.py new file mode 100644 index 0000000..1080234 --- /dev/null +++ b/code/push/google/protobuf/internal/message_listener.py @@ -0,0 +1,78 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Defines a listener interface for observing certain +state transitions on Message objects. + +Also defines a null implementation of this interface. +""" + +__author__ = 'robinson@google.com (Will Robinson)' + + +class MessageListener(object): + + """Listens for modifications made to a message. Meant to be registered via + Message._SetListener(). + + Attributes: + dirty: If True, then calling Modified() would be a no-op. This can be + used to avoid these calls entirely in the common case. + """ + + def Modified(self): + """Called every time the message is modified in such a way that the parent + message may need to be updated. This currently means either: + (a) The message was modified for the first time, so the parent message + should henceforth mark the message as present. + (b) The message's cached byte size became dirty -- i.e. the message was + modified for the first time after a previous call to ByteSize(). + Therefore the parent should also mark its byte size as dirty. + Note that (a) implies (b), since new objects start out with a client cached + size (zero). However, we document (a) explicitly because it is important. + + Modified() will *only* be called in response to one of these two events -- + not every time the sub-message is modified. + + Note that if the listener's |dirty| attribute is true, then calling + Modified at the moment would be a no-op, so it can be skipped. Performance- + sensitive callers should check this attribute directly before calling since + it will be true most of the time. + """ + + raise NotImplementedError + + +class NullMessageListener(object): + + """No-op MessageListener implementation.""" + + def Modified(self): + pass diff --git a/code/push/google/protobuf/internal/message_test.py b/code/push/google/protobuf/internal/message_test.py new file mode 100644 index 0000000..53e9d50 --- /dev/null +++ b/code/push/google/protobuf/internal/message_test.py @@ -0,0 +1,494 @@ +#! /usr/bin/python +# +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Tests python protocol buffers against the golden message. + +Note that the golden messages exercise every known field type, thus this +test ends up exercising and verifying nearly all of the parsing and +serialization code in the whole library. + +TODO(kenton): Merge with wire_format_test? It doesn't make a whole lot of +sense to call this a test of the "message" module, which only declares an +abstract interface. +""" + +__author__ = 'gps@google.com (Gregory P. Smith)' + +import copy +import math +import operator +import pickle + +import unittest +from google.protobuf import unittest_import_pb2 +from google.protobuf import unittest_pb2 +from google.protobuf.internal import api_implementation +from google.protobuf.internal import test_util +from google.protobuf import message + +# Python pre-2.6 does not have isinf() or isnan() functions, so we have +# to provide our own. +def isnan(val): + # NaN is never equal to itself. + return val != val +def isinf(val): + # Infinity times zero equals NaN. + return not isnan(val) and isnan(val * 0) +def IsPosInf(val): + return isinf(val) and (val > 0) +def IsNegInf(val): + return isinf(val) and (val < 0) + +class MessageTest(unittest.TestCase): + + def testGoldenMessage(self): + golden_data = test_util.GoldenFile('golden_message').read() + golden_message = unittest_pb2.TestAllTypes() + golden_message.ParseFromString(golden_data) + test_util.ExpectAllFieldsSet(self, golden_message) + self.assertEqual(golden_data, golden_message.SerializeToString()) + golden_copy = copy.deepcopy(golden_message) + self.assertEqual(golden_data, golden_copy.SerializeToString()) + + def testGoldenExtensions(self): + golden_data = test_util.GoldenFile('golden_message').read() + golden_message = unittest_pb2.TestAllExtensions() + golden_message.ParseFromString(golden_data) + all_set = unittest_pb2.TestAllExtensions() + test_util.SetAllExtensions(all_set) + self.assertEquals(all_set, golden_message) + self.assertEqual(golden_data, golden_message.SerializeToString()) + golden_copy = copy.deepcopy(golden_message) + self.assertEqual(golden_data, golden_copy.SerializeToString()) + + def testGoldenPackedMessage(self): + golden_data = test_util.GoldenFile('golden_packed_fields_message').read() + golden_message = unittest_pb2.TestPackedTypes() + golden_message.ParseFromString(golden_data) + all_set = unittest_pb2.TestPackedTypes() + test_util.SetAllPackedFields(all_set) + self.assertEquals(all_set, golden_message) + self.assertEqual(golden_data, all_set.SerializeToString()) + golden_copy = copy.deepcopy(golden_message) + self.assertEqual(golden_data, golden_copy.SerializeToString()) + + def testGoldenPackedExtensions(self): + golden_data = test_util.GoldenFile('golden_packed_fields_message').read() + golden_message = unittest_pb2.TestPackedExtensions() + golden_message.ParseFromString(golden_data) + all_set = unittest_pb2.TestPackedExtensions() + test_util.SetAllPackedExtensions(all_set) + self.assertEquals(all_set, golden_message) + self.assertEqual(golden_data, all_set.SerializeToString()) + golden_copy = copy.deepcopy(golden_message) + self.assertEqual(golden_data, golden_copy.SerializeToString()) + + def testPickleSupport(self): + golden_data = test_util.GoldenFile('golden_message').read() + golden_message = unittest_pb2.TestAllTypes() + golden_message.ParseFromString(golden_data) + pickled_message = pickle.dumps(golden_message) + + unpickled_message = pickle.loads(pickled_message) + self.assertEquals(unpickled_message, golden_message) + + def testPickleIncompleteProto(self): + golden_message = unittest_pb2.TestRequired(a=1) + pickled_message = pickle.dumps(golden_message) + + unpickled_message = pickle.loads(pickled_message) + self.assertEquals(unpickled_message, golden_message) + self.assertEquals(unpickled_message.a, 1) + # This is still an incomplete proto - so serializing should fail + self.assertRaises(message.EncodeError, unpickled_message.SerializeToString) + + def testPositiveInfinity(self): + golden_data = ('\x5D\x00\x00\x80\x7F' + '\x61\x00\x00\x00\x00\x00\x00\xF0\x7F' + '\xCD\x02\x00\x00\x80\x7F' + '\xD1\x02\x00\x00\x00\x00\x00\x00\xF0\x7F') + golden_message = unittest_pb2.TestAllTypes() + golden_message.ParseFromString(golden_data) + self.assertTrue(IsPosInf(golden_message.optional_float)) + self.assertTrue(IsPosInf(golden_message.optional_double)) + self.assertTrue(IsPosInf(golden_message.repeated_float[0])) + self.assertTrue(IsPosInf(golden_message.repeated_double[0])) + self.assertEqual(golden_data, golden_message.SerializeToString()) + + def testNegativeInfinity(self): + golden_data = ('\x5D\x00\x00\x80\xFF' + '\x61\x00\x00\x00\x00\x00\x00\xF0\xFF' + '\xCD\x02\x00\x00\x80\xFF' + '\xD1\x02\x00\x00\x00\x00\x00\x00\xF0\xFF') + golden_message = unittest_pb2.TestAllTypes() + golden_message.ParseFromString(golden_data) + self.assertTrue(IsNegInf(golden_message.optional_float)) + self.assertTrue(IsNegInf(golden_message.optional_double)) + self.assertTrue(IsNegInf(golden_message.repeated_float[0])) + self.assertTrue(IsNegInf(golden_message.repeated_double[0])) + self.assertEqual(golden_data, golden_message.SerializeToString()) + + def testNotANumber(self): + golden_data = ('\x5D\x00\x00\xC0\x7F' + '\x61\x00\x00\x00\x00\x00\x00\xF8\x7F' + '\xCD\x02\x00\x00\xC0\x7F' + '\xD1\x02\x00\x00\x00\x00\x00\x00\xF8\x7F') + golden_message = unittest_pb2.TestAllTypes() + golden_message.ParseFromString(golden_data) + self.assertTrue(isnan(golden_message.optional_float)) + self.assertTrue(isnan(golden_message.optional_double)) + self.assertTrue(isnan(golden_message.repeated_float[0])) + self.assertTrue(isnan(golden_message.repeated_double[0])) + + # The protocol buffer may serialize to any one of multiple different + # representations of a NaN. Rather than verify a specific representation, + # verify the serialized string can be converted into a correctly + # behaving protocol buffer. + serialized = golden_message.SerializeToString() + message = unittest_pb2.TestAllTypes() + message.ParseFromString(serialized) + self.assertTrue(isnan(message.optional_float)) + self.assertTrue(isnan(message.optional_double)) + self.assertTrue(isnan(message.repeated_float[0])) + self.assertTrue(isnan(message.repeated_double[0])) + + def testPositiveInfinityPacked(self): + golden_data = ('\xA2\x06\x04\x00\x00\x80\x7F' + '\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF0\x7F') + golden_message = unittest_pb2.TestPackedTypes() + golden_message.ParseFromString(golden_data) + self.assertTrue(IsPosInf(golden_message.packed_float[0])) + self.assertTrue(IsPosInf(golden_message.packed_double[0])) + self.assertEqual(golden_data, golden_message.SerializeToString()) + + def testNegativeInfinityPacked(self): + golden_data = ('\xA2\x06\x04\x00\x00\x80\xFF' + '\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF0\xFF') + golden_message = unittest_pb2.TestPackedTypes() + golden_message.ParseFromString(golden_data) + self.assertTrue(IsNegInf(golden_message.packed_float[0])) + self.assertTrue(IsNegInf(golden_message.packed_double[0])) + self.assertEqual(golden_data, golden_message.SerializeToString()) + + def testNotANumberPacked(self): + golden_data = ('\xA2\x06\x04\x00\x00\xC0\x7F' + '\xAA\x06\x08\x00\x00\x00\x00\x00\x00\xF8\x7F') + golden_message = unittest_pb2.TestPackedTypes() + golden_message.ParseFromString(golden_data) + self.assertTrue(isnan(golden_message.packed_float[0])) + self.assertTrue(isnan(golden_message.packed_double[0])) + + serialized = golden_message.SerializeToString() + message = unittest_pb2.TestPackedTypes() + message.ParseFromString(serialized) + self.assertTrue(isnan(message.packed_float[0])) + self.assertTrue(isnan(message.packed_double[0])) + + def testExtremeFloatValues(self): + message = unittest_pb2.TestAllTypes() + + # Most positive exponent, no significand bits set. + kMostPosExponentNoSigBits = math.pow(2, 127) + message.optional_float = kMostPosExponentNoSigBits + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_float == kMostPosExponentNoSigBits) + + # Most positive exponent, one significand bit set. + kMostPosExponentOneSigBit = 1.5 * math.pow(2, 127) + message.optional_float = kMostPosExponentOneSigBit + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_float == kMostPosExponentOneSigBit) + + # Repeat last two cases with values of same magnitude, but negative. + message.optional_float = -kMostPosExponentNoSigBits + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_float == -kMostPosExponentNoSigBits) + + message.optional_float = -kMostPosExponentOneSigBit + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_float == -kMostPosExponentOneSigBit) + + # Most negative exponent, no significand bits set. + kMostNegExponentNoSigBits = math.pow(2, -127) + message.optional_float = kMostNegExponentNoSigBits + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_float == kMostNegExponentNoSigBits) + + # Most negative exponent, one significand bit set. + kMostNegExponentOneSigBit = 1.5 * math.pow(2, -127) + message.optional_float = kMostNegExponentOneSigBit + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_float == kMostNegExponentOneSigBit) + + # Repeat last two cases with values of the same magnitude, but negative. + message.optional_float = -kMostNegExponentNoSigBits + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_float == -kMostNegExponentNoSigBits) + + message.optional_float = -kMostNegExponentOneSigBit + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_float == -kMostNegExponentOneSigBit) + + def testExtremeDoubleValues(self): + message = unittest_pb2.TestAllTypes() + + # Most positive exponent, no significand bits set. + kMostPosExponentNoSigBits = math.pow(2, 1023) + message.optional_double = kMostPosExponentNoSigBits + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_double == kMostPosExponentNoSigBits) + + # Most positive exponent, one significand bit set. + kMostPosExponentOneSigBit = 1.5 * math.pow(2, 1023) + message.optional_double = kMostPosExponentOneSigBit + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_double == kMostPosExponentOneSigBit) + + # Repeat last two cases with values of same magnitude, but negative. + message.optional_double = -kMostPosExponentNoSigBits + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_double == -kMostPosExponentNoSigBits) + + message.optional_double = -kMostPosExponentOneSigBit + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_double == -kMostPosExponentOneSigBit) + + # Most negative exponent, no significand bits set. + kMostNegExponentNoSigBits = math.pow(2, -1023) + message.optional_double = kMostNegExponentNoSigBits + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_double == kMostNegExponentNoSigBits) + + # Most negative exponent, one significand bit set. + kMostNegExponentOneSigBit = 1.5 * math.pow(2, -1023) + message.optional_double = kMostNegExponentOneSigBit + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_double == kMostNegExponentOneSigBit) + + # Repeat last two cases with values of the same magnitude, but negative. + message.optional_double = -kMostNegExponentNoSigBits + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_double == -kMostNegExponentNoSigBits) + + message.optional_double = -kMostNegExponentOneSigBit + message.ParseFromString(message.SerializeToString()) + self.assertTrue(message.optional_double == -kMostNegExponentOneSigBit) + + def testSortingRepeatedScalarFieldsDefaultComparator(self): + """Check some different types with the default comparator.""" + message = unittest_pb2.TestAllTypes() + + # TODO(mattp): would testing more scalar types strengthen test? + message.repeated_int32.append(1) + message.repeated_int32.append(3) + message.repeated_int32.append(2) + message.repeated_int32.sort() + self.assertEqual(message.repeated_int32[0], 1) + self.assertEqual(message.repeated_int32[1], 2) + self.assertEqual(message.repeated_int32[2], 3) + + message.repeated_float.append(1.1) + message.repeated_float.append(1.3) + message.repeated_float.append(1.2) + message.repeated_float.sort() + self.assertAlmostEqual(message.repeated_float[0], 1.1) + self.assertAlmostEqual(message.repeated_float[1], 1.2) + self.assertAlmostEqual(message.repeated_float[2], 1.3) + + message.repeated_string.append('a') + message.repeated_string.append('c') + message.repeated_string.append('b') + message.repeated_string.sort() + self.assertEqual(message.repeated_string[0], 'a') + self.assertEqual(message.repeated_string[1], 'b') + self.assertEqual(message.repeated_string[2], 'c') + + message.repeated_bytes.append('a') + message.repeated_bytes.append('c') + message.repeated_bytes.append('b') + message.repeated_bytes.sort() + self.assertEqual(message.repeated_bytes[0], 'a') + self.assertEqual(message.repeated_bytes[1], 'b') + self.assertEqual(message.repeated_bytes[2], 'c') + + def testSortingRepeatedScalarFieldsCustomComparator(self): + """Check some different types with custom comparator.""" + message = unittest_pb2.TestAllTypes() + + message.repeated_int32.append(-3) + message.repeated_int32.append(-2) + message.repeated_int32.append(-1) + message.repeated_int32.sort(lambda x,y: cmp(abs(x), abs(y))) + self.assertEqual(message.repeated_int32[0], -1) + self.assertEqual(message.repeated_int32[1], -2) + self.assertEqual(message.repeated_int32[2], -3) + + message.repeated_string.append('aaa') + message.repeated_string.append('bb') + message.repeated_string.append('c') + message.repeated_string.sort(lambda x,y: cmp(len(x), len(y))) + self.assertEqual(message.repeated_string[0], 'c') + self.assertEqual(message.repeated_string[1], 'bb') + self.assertEqual(message.repeated_string[2], 'aaa') + + def testSortingRepeatedCompositeFieldsCustomComparator(self): + """Check passing a custom comparator to sort a repeated composite field.""" + message = unittest_pb2.TestAllTypes() + + message.repeated_nested_message.add().bb = 1 + message.repeated_nested_message.add().bb = 3 + message.repeated_nested_message.add().bb = 2 + message.repeated_nested_message.add().bb = 6 + message.repeated_nested_message.add().bb = 5 + message.repeated_nested_message.add().bb = 4 + message.repeated_nested_message.sort(lambda x,y: cmp(x.bb, y.bb)) + self.assertEqual(message.repeated_nested_message[0].bb, 1) + self.assertEqual(message.repeated_nested_message[1].bb, 2) + self.assertEqual(message.repeated_nested_message[2].bb, 3) + self.assertEqual(message.repeated_nested_message[3].bb, 4) + self.assertEqual(message.repeated_nested_message[4].bb, 5) + self.assertEqual(message.repeated_nested_message[5].bb, 6) + + def testRepeatedCompositeFieldSortArguments(self): + """Check sorting a repeated composite field using list.sort() arguments.""" + message = unittest_pb2.TestAllTypes() + + get_bb = operator.attrgetter('bb') + cmp_bb = lambda a, b: cmp(a.bb, b.bb) + message.repeated_nested_message.add().bb = 1 + message.repeated_nested_message.add().bb = 3 + message.repeated_nested_message.add().bb = 2 + message.repeated_nested_message.add().bb = 6 + message.repeated_nested_message.add().bb = 5 + message.repeated_nested_message.add().bb = 4 + message.repeated_nested_message.sort(key=get_bb) + self.assertEqual([k.bb for k in message.repeated_nested_message], + [1, 2, 3, 4, 5, 6]) + message.repeated_nested_message.sort(key=get_bb, reverse=True) + self.assertEqual([k.bb for k in message.repeated_nested_message], + [6, 5, 4, 3, 2, 1]) + message.repeated_nested_message.sort(sort_function=cmp_bb) + self.assertEqual([k.bb for k in message.repeated_nested_message], + [1, 2, 3, 4, 5, 6]) + message.repeated_nested_message.sort(cmp=cmp_bb, reverse=True) + self.assertEqual([k.bb for k in message.repeated_nested_message], + [6, 5, 4, 3, 2, 1]) + + def testRepeatedScalarFieldSortArguments(self): + """Check sorting a scalar field using list.sort() arguments.""" + message = unittest_pb2.TestAllTypes() + + abs_cmp = lambda a, b: cmp(abs(a), abs(b)) + message.repeated_int32.append(-3) + message.repeated_int32.append(-2) + message.repeated_int32.append(-1) + message.repeated_int32.sort(key=abs) + self.assertEqual(list(message.repeated_int32), [-1, -2, -3]) + message.repeated_int32.sort(key=abs, reverse=True) + self.assertEqual(list(message.repeated_int32), [-3, -2, -1]) + message.repeated_int32.sort(sort_function=abs_cmp) + self.assertEqual(list(message.repeated_int32), [-1, -2, -3]) + message.repeated_int32.sort(cmp=abs_cmp, reverse=True) + self.assertEqual(list(message.repeated_int32), [-3, -2, -1]) + + len_cmp = lambda a, b: cmp(len(a), len(b)) + message.repeated_string.append('aaa') + message.repeated_string.append('bb') + message.repeated_string.append('c') + message.repeated_string.sort(key=len) + self.assertEqual(list(message.repeated_string), ['c', 'bb', 'aaa']) + message.repeated_string.sort(key=len, reverse=True) + self.assertEqual(list(message.repeated_string), ['aaa', 'bb', 'c']) + message.repeated_string.sort(sort_function=len_cmp) + self.assertEqual(list(message.repeated_string), ['c', 'bb', 'aaa']) + message.repeated_string.sort(cmp=len_cmp, reverse=True) + self.assertEqual(list(message.repeated_string), ['aaa', 'bb', 'c']) + + def testParsingMerge(self): + """Check the merge behavior when a required or optional field appears + multiple times in the input.""" + messages = [ + unittest_pb2.TestAllTypes(), + unittest_pb2.TestAllTypes(), + unittest_pb2.TestAllTypes() ] + messages[0].optional_int32 = 1 + messages[1].optional_int64 = 2 + messages[2].optional_int32 = 3 + messages[2].optional_string = 'hello' + + merged_message = unittest_pb2.TestAllTypes() + merged_message.optional_int32 = 3 + merged_message.optional_int64 = 2 + merged_message.optional_string = 'hello' + + generator = unittest_pb2.TestParsingMerge.RepeatedFieldsGenerator() + generator.field1.extend(messages) + generator.field2.extend(messages) + generator.field3.extend(messages) + generator.ext1.extend(messages) + generator.ext2.extend(messages) + generator.group1.add().field1.MergeFrom(messages[0]) + generator.group1.add().field1.MergeFrom(messages[1]) + generator.group1.add().field1.MergeFrom(messages[2]) + generator.group2.add().field1.MergeFrom(messages[0]) + generator.group2.add().field1.MergeFrom(messages[1]) + generator.group2.add().field1.MergeFrom(messages[2]) + + data = generator.SerializeToString() + parsing_merge = unittest_pb2.TestParsingMerge() + parsing_merge.ParseFromString(data) + + # Required and optional fields should be merged. + self.assertEqual(parsing_merge.required_all_types, merged_message) + self.assertEqual(parsing_merge.optional_all_types, merged_message) + self.assertEqual(parsing_merge.optionalgroup.optional_group_all_types, + merged_message) + self.assertEqual(parsing_merge.Extensions[ + unittest_pb2.TestParsingMerge.optional_ext], + merged_message) + + # Repeated fields should not be merged. + self.assertEqual(len(parsing_merge.repeated_all_types), 3) + self.assertEqual(len(parsing_merge.repeatedgroup), 3) + self.assertEqual(len(parsing_merge.Extensions[ + unittest_pb2.TestParsingMerge.repeated_ext]), 3) + + + def testSortEmptyRepeatedCompositeContainer(self): + """Exercise a scenario that has led to segfaults in the past. + """ + m = unittest_pb2.TestAllTypes() + m.repeated_nested_message.sort() + + +if __name__ == '__main__': + unittest.main() diff --git a/code/push/google/protobuf/internal/more_extensions.proto b/code/push/google/protobuf/internal/more_extensions.proto new file mode 100644 index 0000000..e2d9701 --- /dev/null +++ b/code/push/google/protobuf/internal/more_extensions.proto @@ -0,0 +1,58 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: robinson@google.com (Will Robinson) + + +package google.protobuf.internal; + + +message TopLevelMessage { + optional ExtendedMessage submessage = 1; +} + + +message ExtendedMessage { + extensions 1 to max; +} + + +message ForeignMessage { + optional int32 foreign_message_int = 1; +} + + +extend ExtendedMessage { + optional int32 optional_int_extension = 1; + optional ForeignMessage optional_message_extension = 2; + + repeated int32 repeated_int_extension = 3; + repeated ForeignMessage repeated_message_extension = 4; +} diff --git a/code/push/google/protobuf/internal/more_extensions_dynamic.proto b/code/push/google/protobuf/internal/more_extensions_dynamic.proto new file mode 100644 index 0000000..df98ac4 --- /dev/null +++ b/code/push/google/protobuf/internal/more_extensions_dynamic.proto @@ -0,0 +1,49 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: jasonh@google.com (Jason Hsueh) +// +// This file is used to test a corner case in the CPP implementation where the +// generated C++ type is available for the extendee, but the extension is +// defined in a file whose C++ type is not in the binary. + + +import "google/protobuf/internal/more_extensions.proto"; + +package google.protobuf.internal; + +message DynamicMessageType { + optional int32 a = 1; +} + +extend ExtendedMessage { + optional int32 dynamic_int32_extension = 100; + optional DynamicMessageType dynamic_message_extension = 101; +} diff --git a/code/push/google/protobuf/internal/more_extensions_dynamic_pb2.py b/code/push/google/protobuf/internal/more_extensions_dynamic_pb2.py new file mode 100644 index 0000000..b9d331f --- /dev/null +++ b/code/push/google/protobuf/internal/more_extensions_dynamic_pb2.py @@ -0,0 +1,77 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/protobuf/internal/more_extensions_dynamic.proto + +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + + +import google.protobuf.internal.more_extensions_pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/protobuf/internal/more_extensions_dynamic.proto', + package='google.protobuf.internal', + serialized_pb='\n6google/protobuf/internal/more_extensions_dynamic.proto\x12\x18google.protobuf.internal\x1a.google/protobuf/internal/more_extensions.proto\"\x1f\n\x12\x44ynamicMessageType\x12\t\n\x01\x61\x18\x01 \x01(\x05:J\n\x17\x64ynamic_int32_extension\x12).google.protobuf.internal.ExtendedMessage\x18\x64 \x01(\x05:z\n\x19\x64ynamic_message_extension\x12).google.protobuf.internal.ExtendedMessage\x18\x65 \x01(\x0b\x32,.google.protobuf.internal.DynamicMessageType') + + +DYNAMIC_INT32_EXTENSION_FIELD_NUMBER = 100 +dynamic_int32_extension = _descriptor.FieldDescriptor( + name='dynamic_int32_extension', full_name='google.protobuf.internal.dynamic_int32_extension', index=0, + number=100, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DYNAMIC_MESSAGE_EXTENSION_FIELD_NUMBER = 101 +dynamic_message_extension = _descriptor.FieldDescriptor( + name='dynamic_message_extension', full_name='google.protobuf.internal.dynamic_message_extension', index=1, + number=101, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) + + +_DYNAMICMESSAGETYPE = _descriptor.Descriptor( + name='DynamicMessageType', + full_name='google.protobuf.internal.DynamicMessageType', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='a', full_name='google.protobuf.internal.DynamicMessageType.a', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=132, + serialized_end=163, +) + +DESCRIPTOR.message_types_by_name['DynamicMessageType'] = _DYNAMICMESSAGETYPE + +class DynamicMessageType(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _DYNAMICMESSAGETYPE + + # @@protoc_insertion_point(class_scope:google.protobuf.internal.DynamicMessageType) + +google.protobuf.internal.more_extensions_pb2.ExtendedMessage.RegisterExtension(dynamic_int32_extension) +dynamic_message_extension.message_type = _DYNAMICMESSAGETYPE +google.protobuf.internal.more_extensions_pb2.ExtendedMessage.RegisterExtension(dynamic_message_extension) + +# @@protoc_insertion_point(module_scope) diff --git a/code/push/google/protobuf/internal/more_extensions_pb2.py b/code/push/google/protobuf/internal/more_extensions_pb2.py new file mode 100644 index 0000000..03594bb --- /dev/null +++ b/code/push/google/protobuf/internal/more_extensions_pb2.py @@ -0,0 +1,159 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/protobuf/internal/more_extensions.proto + +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/protobuf/internal/more_extensions.proto', + package='google.protobuf.internal', + serialized_pb='\n.google/protobuf/internal/more_extensions.proto\x12\x18google.protobuf.internal\"P\n\x0fTopLevelMessage\x12=\n\nsubmessage\x18\x01 \x01(\x0b\x32).google.protobuf.internal.ExtendedMessage\"\x1b\n\x0f\x45xtendedMessage*\x08\x08\x01\x10\x80\x80\x80\x80\x02\"-\n\x0e\x46oreignMessage\x12\x1b\n\x13\x66oreign_message_int\x18\x01 \x01(\x05:I\n\x16optional_int_extension\x12).google.protobuf.internal.ExtendedMessage\x18\x01 \x01(\x05:w\n\x1aoptional_message_extension\x12).google.protobuf.internal.ExtendedMessage\x18\x02 \x01(\x0b\x32(.google.protobuf.internal.ForeignMessage:I\n\x16repeated_int_extension\x12).google.protobuf.internal.ExtendedMessage\x18\x03 \x03(\x05:w\n\x1arepeated_message_extension\x12).google.protobuf.internal.ExtendedMessage\x18\x04 \x03(\x0b\x32(.google.protobuf.internal.ForeignMessage') + + +OPTIONAL_INT_EXTENSION_FIELD_NUMBER = 1 +optional_int_extension = _descriptor.FieldDescriptor( + name='optional_int_extension', full_name='google.protobuf.internal.optional_int_extension', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_MESSAGE_EXTENSION_FIELD_NUMBER = 2 +optional_message_extension = _descriptor.FieldDescriptor( + name='optional_message_extension', full_name='google.protobuf.internal.optional_message_extension', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_INT_EXTENSION_FIELD_NUMBER = 3 +repeated_int_extension = _descriptor.FieldDescriptor( + name='repeated_int_extension', full_name='google.protobuf.internal.repeated_int_extension', index=2, + number=3, type=5, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_MESSAGE_EXTENSION_FIELD_NUMBER = 4 +repeated_message_extension = _descriptor.FieldDescriptor( + name='repeated_message_extension', full_name='google.protobuf.internal.repeated_message_extension', index=3, + number=4, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) + + +_TOPLEVELMESSAGE = _descriptor.Descriptor( + name='TopLevelMessage', + full_name='google.protobuf.internal.TopLevelMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='submessage', full_name='google.protobuf.internal.TopLevelMessage.submessage', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=76, + serialized_end=156, +) + + +_EXTENDEDMESSAGE = _descriptor.Descriptor( + name='ExtendedMessage', + full_name='google.protobuf.internal.ExtendedMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(1, 536870912), ], + serialized_start=158, + serialized_end=185, +) + + +_FOREIGNMESSAGE = _descriptor.Descriptor( + name='ForeignMessage', + full_name='google.protobuf.internal.ForeignMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='foreign_message_int', full_name='google.protobuf.internal.ForeignMessage.foreign_message_int', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=187, + serialized_end=232, +) + +_TOPLEVELMESSAGE.fields_by_name['submessage'].message_type = _EXTENDEDMESSAGE +DESCRIPTOR.message_types_by_name['TopLevelMessage'] = _TOPLEVELMESSAGE +DESCRIPTOR.message_types_by_name['ExtendedMessage'] = _EXTENDEDMESSAGE +DESCRIPTOR.message_types_by_name['ForeignMessage'] = _FOREIGNMESSAGE + +class TopLevelMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TOPLEVELMESSAGE + + # @@protoc_insertion_point(class_scope:google.protobuf.internal.TopLevelMessage) + +class ExtendedMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _EXTENDEDMESSAGE + + # @@protoc_insertion_point(class_scope:google.protobuf.internal.ExtendedMessage) + +class ForeignMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _FOREIGNMESSAGE + + # @@protoc_insertion_point(class_scope:google.protobuf.internal.ForeignMessage) + +ExtendedMessage.RegisterExtension(optional_int_extension) +optional_message_extension.message_type = _FOREIGNMESSAGE +ExtendedMessage.RegisterExtension(optional_message_extension) +ExtendedMessage.RegisterExtension(repeated_int_extension) +repeated_message_extension.message_type = _FOREIGNMESSAGE +ExtendedMessage.RegisterExtension(repeated_message_extension) + +# @@protoc_insertion_point(module_scope) diff --git a/code/push/google/protobuf/internal/more_messages.proto b/code/push/google/protobuf/internal/more_messages.proto new file mode 100644 index 0000000..c701b44 --- /dev/null +++ b/code/push/google/protobuf/internal/more_messages.proto @@ -0,0 +1,51 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: robinson@google.com (Will Robinson) + + +package google.protobuf.internal; + +// A message where tag numbers are listed out of order, to allow us to test our +// canonicalization of serialized output, which should always be in tag order. +// We also mix in some extensions for extra fun. +message OutOfOrderFields { + optional sint32 optional_sint32 = 5; + extensions 4 to 4; + optional uint32 optional_uint32 = 3; + extensions 2 to 2; + optional int32 optional_int32 = 1; +}; + + +extend OutOfOrderFields { + optional uint64 optional_uint64 = 4; + optional int64 optional_int64 = 2; +} diff --git a/code/push/google/protobuf/internal/more_messages_pb2.py b/code/push/google/protobuf/internal/more_messages_pb2.py new file mode 100644 index 0000000..41f6ba3 --- /dev/null +++ b/code/push/google/protobuf/internal/more_messages_pb2.py @@ -0,0 +1,89 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/protobuf/internal/more_messages.proto + +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/protobuf/internal/more_messages.proto', + package='google.protobuf.internal', + serialized_pb='\n,google/protobuf/internal/more_messages.proto\x12\x18google.protobuf.internal\"h\n\x10OutOfOrderFields\x12\x17\n\x0foptional_sint32\x18\x05 \x01(\x11\x12\x17\n\x0foptional_uint32\x18\x03 \x01(\r\x12\x16\n\x0eoptional_int32\x18\x01 \x01(\x05*\x04\x08\x04\x10\x05*\x04\x08\x02\x10\x03:C\n\x0foptional_uint64\x12*.google.protobuf.internal.OutOfOrderFields\x18\x04 \x01(\x04:B\n\x0eoptional_int64\x12*.google.protobuf.internal.OutOfOrderFields\x18\x02 \x01(\x03') + + +OPTIONAL_UINT64_FIELD_NUMBER = 4 +optional_uint64 = _descriptor.FieldDescriptor( + name='optional_uint64', full_name='google.protobuf.internal.optional_uint64', index=0, + number=4, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_INT64_FIELD_NUMBER = 2 +optional_int64 = _descriptor.FieldDescriptor( + name='optional_int64', full_name='google.protobuf.internal.optional_int64', index=1, + number=2, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) + + +_OUTOFORDERFIELDS = _descriptor.Descriptor( + name='OutOfOrderFields', + full_name='google.protobuf.internal.OutOfOrderFields', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='optional_sint32', full_name='google.protobuf.internal.OutOfOrderFields.optional_sint32', index=0, + number=5, type=17, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_uint32', full_name='google.protobuf.internal.OutOfOrderFields.optional_uint32', index=1, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_int32', full_name='google.protobuf.internal.OutOfOrderFields.optional_int32', index=2, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(4, 5), (2, 3), ], + serialized_start=74, + serialized_end=178, +) + +DESCRIPTOR.message_types_by_name['OutOfOrderFields'] = _OUTOFORDERFIELDS + +class OutOfOrderFields(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _OUTOFORDERFIELDS + + # @@protoc_insertion_point(class_scope:google.protobuf.internal.OutOfOrderFields) + +OutOfOrderFields.RegisterExtension(optional_uint64) +OutOfOrderFields.RegisterExtension(optional_int64) + +# @@protoc_insertion_point(module_scope) diff --git a/code/push/google/protobuf/internal/python_message.py b/code/push/google/protobuf/internal/python_message.py new file mode 100644 index 0000000..b006434 --- /dev/null +++ b/code/push/google/protobuf/internal/python_message.py @@ -0,0 +1,1150 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# This code is meant to work on Python 2.4 and above only. +# +# TODO(robinson): Helpers for verbose, common checks like seeing if a +# descriptor's cpp_type is CPPTYPE_MESSAGE. + +"""Contains a metaclass and helper functions used to create +protocol message classes from Descriptor objects at runtime. + +Recall that a metaclass is the "type" of a class. +(A class is to a metaclass what an instance is to a class.) + +In this case, we use the GeneratedProtocolMessageType metaclass +to inject all the useful functionality into the classes +output by the protocol compiler at compile-time. + +The upshot of all this is that the real implementation +details for ALL pure-Python protocol buffers are *here in +this file*. +""" + +__author__ = 'robinson@google.com (Will Robinson)' + +try: + from cStringIO import StringIO +except ImportError: + from StringIO import StringIO +import copy_reg +import struct +import weakref + +# We use "as" to avoid name collisions with variables. +from push.google.protobuf.internal import containers +from push.google.protobuf.internal import decoder +from push.google.protobuf.internal import encoder +from push.google.protobuf.internal import enum_type_wrapper +from push.google.protobuf.internal import message_listener as message_listener_mod +from push.google.protobuf.internal import type_checkers +from push.google.protobuf.internal import wire_format +from push.google.protobuf import descriptor as descriptor_mod +from push.google.protobuf import message as message_mod +from push.google.protobuf import text_format + +_FieldDescriptor = descriptor_mod.FieldDescriptor + + +def NewMessage(bases, descriptor, dictionary): + _AddClassAttributesForNestedExtensions(descriptor, dictionary) + _AddSlots(descriptor, dictionary) + return bases + + +def InitMessage(descriptor, cls): + cls._decoders_by_tag = {} + cls._extensions_by_name = {} + cls._extensions_by_number = {} + if (descriptor.has_options and + descriptor.GetOptions().message_set_wire_format): + cls._decoders_by_tag[decoder.MESSAGE_SET_ITEM_TAG] = ( + decoder.MessageSetItemDecoder(cls._extensions_by_number)) + + # Attach stuff to each FieldDescriptor for quick lookup later on. + for field in descriptor.fields: + _AttachFieldHelpers(cls, field) + + _AddEnumValues(descriptor, cls) + _AddInitMethod(descriptor, cls) + _AddPropertiesForFields(descriptor, cls) + _AddPropertiesForExtensions(descriptor, cls) + _AddStaticMethods(cls) + _AddMessageMethods(descriptor, cls) + _AddPrivateHelperMethods(cls) + copy_reg.pickle(cls, lambda obj: (cls, (), obj.__getstate__())) + + +# Stateless helpers for GeneratedProtocolMessageType below. +# Outside clients should not access these directly. +# +# I opted not to make any of these methods on the metaclass, to make it more +# clear that I'm not really using any state there and to keep clients from +# thinking that they have direct access to these construction helpers. + + +def _PropertyName(proto_field_name): + """Returns the name of the public property attribute which + clients can use to get and (in some cases) set the value + of a protocol message field. + + Args: + proto_field_name: The protocol message field name, exactly + as it appears (or would appear) in a .proto file. + """ + # TODO(robinson): Escape Python keywords (e.g., yield), and test this support. + # nnorwitz makes my day by writing: + # """ + # FYI. See the keyword module in the stdlib. This could be as simple as: + # + # if keyword.iskeyword(proto_field_name): + # return proto_field_name + "_" + # return proto_field_name + # """ + # Kenton says: The above is a BAD IDEA. People rely on being able to use + # getattr() and setattr() to reflectively manipulate field values. If we + # rename the properties, then every such user has to also make sure to apply + # the same transformation. Note that currently if you name a field "yield", + # you can still access it just fine using getattr/setattr -- it's not even + # that cumbersome to do so. + # TODO(kenton): Remove this method entirely if/when everyone agrees with my + # position. + return proto_field_name + + +def _VerifyExtensionHandle(message, extension_handle): + """Verify that the given extension handle is valid.""" + + if not isinstance(extension_handle, _FieldDescriptor): + raise KeyError('HasExtension() expects an extension handle, got: %s' % + extension_handle) + + if not extension_handle.is_extension: + raise KeyError('"%s" is not an extension.' % extension_handle.full_name) + + if not extension_handle.containing_type: + raise KeyError('"%s" is missing a containing_type.' + % extension_handle.full_name) + + if extension_handle.containing_type is not message.DESCRIPTOR: + raise KeyError('Extension "%s" extends message type "%s", but this ' + 'message is of type "%s".' % + (extension_handle.full_name, + extension_handle.containing_type.full_name, + message.DESCRIPTOR.full_name)) + + +def _AddSlots(message_descriptor, dictionary): + """Adds a __slots__ entry to dictionary, containing the names of all valid + attributes for this message type. + + Args: + message_descriptor: A Descriptor instance describing this message type. + dictionary: Class dictionary to which we'll add a '__slots__' entry. + """ + dictionary['__slots__'] = ['_cached_byte_size', + '_cached_byte_size_dirty', + '_fields', + '_unknown_fields', + '_is_present_in_parent', + '_listener', + '_listener_for_children', + '__weakref__'] + + +def _IsMessageSetExtension(field): + return (field.is_extension and + field.containing_type.has_options and + field.containing_type.GetOptions().message_set_wire_format and + field.type == _FieldDescriptor.TYPE_MESSAGE and + field.message_type == field.extension_scope and + field.label == _FieldDescriptor.LABEL_OPTIONAL) + + +def _AttachFieldHelpers(cls, field_descriptor): + is_repeated = (field_descriptor.label == _FieldDescriptor.LABEL_REPEATED) + is_packed = (field_descriptor.has_options and + field_descriptor.GetOptions().packed) + + if _IsMessageSetExtension(field_descriptor): + field_encoder = encoder.MessageSetItemEncoder(field_descriptor.number) + sizer = encoder.MessageSetItemSizer(field_descriptor.number) + else: + field_encoder = type_checkers.TYPE_TO_ENCODER[field_descriptor.type]( + field_descriptor.number, is_repeated, is_packed) + sizer = type_checkers.TYPE_TO_SIZER[field_descriptor.type]( + field_descriptor.number, is_repeated, is_packed) + + field_descriptor._encoder = field_encoder + field_descriptor._sizer = sizer + field_descriptor._default_constructor = _DefaultValueConstructorForField( + field_descriptor) + + def AddDecoder(wiretype, is_packed): + tag_bytes = encoder.TagBytes(field_descriptor.number, wiretype) + cls._decoders_by_tag[tag_bytes] = ( + type_checkers.TYPE_TO_DECODER[field_descriptor.type]( + field_descriptor.number, is_repeated, is_packed, + field_descriptor, field_descriptor._default_constructor)) + + AddDecoder(type_checkers.FIELD_TYPE_TO_WIRE_TYPE[field_descriptor.type], + False) + + if is_repeated and wire_format.IsTypePackable(field_descriptor.type): + # To support wire compatibility of adding packed = true, add a decoder for + # packed values regardless of the field's options. + AddDecoder(wire_format.WIRETYPE_LENGTH_DELIMITED, True) + + +def _AddClassAttributesForNestedExtensions(descriptor, dictionary): + extension_dict = descriptor.extensions_by_name + for extension_name, extension_field in extension_dict.iteritems(): + assert extension_name not in dictionary + dictionary[extension_name] = extension_field + + +def _AddEnumValues(descriptor, cls): + """Sets class-level attributes for all enum fields defined in this message. + + Also exporting a class-level object that can name enum values. + + Args: + descriptor: Descriptor object for this message type. + cls: Class we're constructing for this message type. + """ + for enum_type in descriptor.enum_types: + setattr(cls, enum_type.name, enum_type_wrapper.EnumTypeWrapper(enum_type)) + for enum_value in enum_type.values: + setattr(cls, enum_value.name, enum_value.number) + + +def _DefaultValueConstructorForField(field): + """Returns a function which returns a default value for a field. + + Args: + field: FieldDescriptor object for this field. + + The returned function has one argument: + message: Message instance containing this field, or a weakref proxy + of same. + + That function in turn returns a default value for this field. The default + value may refer back to |message| via a weak reference. + """ + + if field.label == _FieldDescriptor.LABEL_REPEATED: + if field.has_default_value and field.default_value != []: + raise ValueError('Repeated field default value not empty list: %s' % ( + field.default_value)) + if field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE: + # We can't look at _concrete_class yet since it might not have + # been set. (Depends on order in which we initialize the classes). + message_type = field.message_type + def MakeRepeatedMessageDefault(message): + return containers.RepeatedCompositeFieldContainer( + message._listener_for_children, field.message_type) + return MakeRepeatedMessageDefault + else: + type_checker = type_checkers.GetTypeChecker(field.cpp_type, field.type) + def MakeRepeatedScalarDefault(message): + return containers.RepeatedScalarFieldContainer( + message._listener_for_children, type_checker) + return MakeRepeatedScalarDefault + + if field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE: + # _concrete_class may not yet be initialized. + message_type = field.message_type + def MakeSubMessageDefault(message): + result = message_type._concrete_class() + result._SetListener(message._listener_for_children) + return result + return MakeSubMessageDefault + + def MakeScalarDefault(message): + # TODO(protobuf-team): This may be broken since there may not be + # default_value. Combine with has_default_value somehow. + return field.default_value + return MakeScalarDefault + + +def _AddInitMethod(message_descriptor, cls): + """Adds an __init__ method to cls.""" + fields = message_descriptor.fields + def init(self, **kwargs): + self._cached_byte_size = 0 + self._cached_byte_size_dirty = len(kwargs) > 0 + self._fields = {} + # _unknown_fields is () when empty for efficiency, and will be turned into + # a list if fields are added. + self._unknown_fields = () + self._is_present_in_parent = False + self._listener = message_listener_mod.NullMessageListener() + self._listener_for_children = _Listener(self) + for field_name, field_value in kwargs.iteritems(): + field = _GetFieldByName(message_descriptor, field_name) + if field is None: + raise TypeError("%s() got an unexpected keyword argument '%s'" % + (message_descriptor.name, field_name)) + if field.label == _FieldDescriptor.LABEL_REPEATED: + copy = field._default_constructor(self) + if field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE: # Composite + for val in field_value: + copy.add().MergeFrom(val) + else: # Scalar + copy.extend(field_value) + self._fields[field] = copy + elif field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE: + copy = field._default_constructor(self) + copy.MergeFrom(field_value) + self._fields[field] = copy + else: + setattr(self, field_name, field_value) + + init.__module__ = None + init.__doc__ = None + cls.__init__ = init + + +def _GetFieldByName(message_descriptor, field_name): + """Returns a field descriptor by field name. + + Args: + message_descriptor: A Descriptor describing all fields in message. + field_name: The name of the field to retrieve. + Returns: + The field descriptor associated with the field name. + """ + try: + return message_descriptor.fields_by_name[field_name] + except KeyError: + raise ValueError('Protocol message has no "%s" field.' % field_name) + + +def _AddPropertiesForFields(descriptor, cls): + """Adds properties for all fields in this protocol message type.""" + for field in descriptor.fields: + _AddPropertiesForField(field, cls) + + if descriptor.is_extendable: + # _ExtensionDict is just an adaptor with no state so we allocate a new one + # every time it is accessed. + cls.Extensions = property(lambda self: _ExtensionDict(self)) + + +def _AddPropertiesForField(field, cls): + """Adds a public property for a protocol message field. + Clients can use this property to get and (in the case + of non-repeated scalar fields) directly set the value + of a protocol message field. + + Args: + field: A FieldDescriptor for this field. + cls: The class we're constructing. + """ + # Catch it if we add other types that we should + # handle specially here. + assert _FieldDescriptor.MAX_CPPTYPE == 10 + + constant_name = field.name.upper() + "_FIELD_NUMBER" + setattr(cls, constant_name, field.number) + + if field.label == _FieldDescriptor.LABEL_REPEATED: + _AddPropertiesForRepeatedField(field, cls) + elif field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE: + _AddPropertiesForNonRepeatedCompositeField(field, cls) + else: + _AddPropertiesForNonRepeatedScalarField(field, cls) + + +def _AddPropertiesForRepeatedField(field, cls): + """Adds a public property for a "repeated" protocol message field. Clients + can use this property to get the value of the field, which will be either a + _RepeatedScalarFieldContainer or _RepeatedCompositeFieldContainer (see + below). + + Note that when clients add values to these containers, we perform + type-checking in the case of repeated scalar fields, and we also set any + necessary "has" bits as a side-effect. + + Args: + field: A FieldDescriptor for this field. + cls: The class we're constructing. + """ + proto_field_name = field.name + property_name = _PropertyName(proto_field_name) + + def getter(self): + field_value = self._fields.get(field) + if field_value is None: + # Construct a new object to represent this field. + field_value = field._default_constructor(self) + + # Atomically check if another thread has preempted us and, if not, swap + # in the new object we just created. If someone has preempted us, we + # take that object and discard ours. + # WARNING: We are relying on setdefault() being atomic. This is true + # in CPython but we haven't investigated others. This warning appears + # in several other locations in this file. + field_value = self._fields.setdefault(field, field_value) + return field_value + getter.__module__ = None + getter.__doc__ = 'Getter for %s.' % proto_field_name + + # We define a setter just so we can throw an exception with a more + # helpful error message. + def setter(self, new_value): + raise AttributeError('Assignment not allowed to repeated field ' + '"%s" in protocol message object.' % proto_field_name) + + doc = 'Magic attribute generated for "%s" proto field.' % proto_field_name + setattr(cls, property_name, property(getter, setter, doc=doc)) + + +def _AddPropertiesForNonRepeatedScalarField(field, cls): + """Adds a public property for a nonrepeated, scalar protocol message field. + Clients can use this property to get and directly set the value of the field. + Note that when the client sets the value of a field by using this property, + all necessary "has" bits are set as a side-effect, and we also perform + type-checking. + + Args: + field: A FieldDescriptor for this field. + cls: The class we're constructing. + """ + proto_field_name = field.name + property_name = _PropertyName(proto_field_name) + type_checker = type_checkers.GetTypeChecker(field.cpp_type, field.type) + default_value = field.default_value + valid_values = set() + + def getter(self): + # TODO(protobuf-team): This may be broken since there may not be + # default_value. Combine with has_default_value somehow. + return self._fields.get(field, default_value) + getter.__module__ = None + getter.__doc__ = 'Getter for %s.' % proto_field_name + def setter(self, new_value): + type_checker.CheckValue(new_value) + self._fields[field] = new_value + # Check _cached_byte_size_dirty inline to improve performance, since scalar + # setters are called frequently. + if not self._cached_byte_size_dirty: + self._Modified() + + setter.__module__ = None + setter.__doc__ = 'Setter for %s.' % proto_field_name + + # Add a property to encapsulate the getter/setter. + doc = 'Magic attribute generated for "%s" proto field.' % proto_field_name + setattr(cls, property_name, property(getter, setter, doc=doc)) + + +def _AddPropertiesForNonRepeatedCompositeField(field, cls): + """Adds a public property for a nonrepeated, composite protocol message field. + A composite field is a "group" or "message" field. + + Clients can use this property to get the value of the field, but cannot + assign to the property directly. + + Args: + field: A FieldDescriptor for this field. + cls: The class we're constructing. + """ + # TODO(robinson): Remove duplication with similar method + # for non-repeated scalars. + proto_field_name = field.name + property_name = _PropertyName(proto_field_name) + + # TODO(komarek): Can anyone explain to me why we cache the message_type this + # way, instead of referring to field.message_type inside of getter(self)? + # What if someone sets message_type later on (which makes for simpler + # dyanmic proto descriptor and class creation code). + message_type = field.message_type + + def getter(self): + field_value = self._fields.get(field) + if field_value is None: + # Construct a new object to represent this field. + field_value = message_type._concrete_class() # use field.message_type? + field_value._SetListener(self._listener_for_children) + + # Atomically check if another thread has preempted us and, if not, swap + # in the new object we just created. If someone has preempted us, we + # take that object and discard ours. + # WARNING: We are relying on setdefault() being atomic. This is true + # in CPython but we haven't investigated others. This warning appears + # in several other locations in this file. + field_value = self._fields.setdefault(field, field_value) + return field_value + getter.__module__ = None + getter.__doc__ = 'Getter for %s.' % proto_field_name + + # We define a setter just so we can throw an exception with a more + # helpful error message. + def setter(self, new_value): + raise AttributeError('Assignment not allowed to composite field ' + '"%s" in protocol message object.' % proto_field_name) + + # Add a property to encapsulate the getter. + doc = 'Magic attribute generated for "%s" proto field.' % proto_field_name + setattr(cls, property_name, property(getter, setter, doc=doc)) + + +def _AddPropertiesForExtensions(descriptor, cls): + """Adds properties for all fields in this protocol message type.""" + extension_dict = descriptor.extensions_by_name + for extension_name, extension_field in extension_dict.iteritems(): + constant_name = extension_name.upper() + "_FIELD_NUMBER" + setattr(cls, constant_name, extension_field.number) + + +def _AddStaticMethods(cls): + # TODO(robinson): This probably needs to be thread-safe(?) + def RegisterExtension(extension_handle): + extension_handle.containing_type = cls.DESCRIPTOR + _AttachFieldHelpers(cls, extension_handle) + + # Try to insert our extension, failing if an extension with the same number + # already exists. + actual_handle = cls._extensions_by_number.setdefault( + extension_handle.number, extension_handle) + if actual_handle is not extension_handle: + raise AssertionError( + 'Extensions "%s" and "%s" both try to extend message type "%s" with ' + 'field number %d.' % + (extension_handle.full_name, actual_handle.full_name, + cls.DESCRIPTOR.full_name, extension_handle.number)) + + cls._extensions_by_name[extension_handle.full_name] = extension_handle + + handle = extension_handle # avoid line wrapping + if _IsMessageSetExtension(handle): + # MessageSet extension. Also register under type name. + cls._extensions_by_name[ + extension_handle.message_type.full_name] = extension_handle + + cls.RegisterExtension = staticmethod(RegisterExtension) + + def FromString(s): + message = cls() + message.MergeFromString(s) + return message + cls.FromString = staticmethod(FromString) + + +def _IsPresent(item): + """Given a (FieldDescriptor, value) tuple from _fields, return true if the + value should be included in the list returned by ListFields().""" + + if item[0].label == _FieldDescriptor.LABEL_REPEATED: + return bool(item[1]) + elif item[0].cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE: + return item[1]._is_present_in_parent + else: + return True + + +def _AddListFieldsMethod(message_descriptor, cls): + """Helper for _AddMessageMethods().""" + + def ListFields(self): + all_fields = [item for item in self._fields.iteritems() if _IsPresent(item)] + all_fields.sort(key = lambda item: item[0].number) + return all_fields + + cls.ListFields = ListFields + + +def _AddHasFieldMethod(message_descriptor, cls): + """Helper for _AddMessageMethods().""" + + singular_fields = {} + for field in message_descriptor.fields: + if field.label != _FieldDescriptor.LABEL_REPEATED: + singular_fields[field.name] = field + + def HasField(self, field_name): + try: + field = singular_fields[field_name] + except KeyError: + raise ValueError( + 'Protocol message has no singular "%s" field.' % field_name) + + if field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE: + value = self._fields.get(field) + return value is not None and value._is_present_in_parent + else: + return field in self._fields + cls.HasField = HasField + + +def _AddClearFieldMethod(message_descriptor, cls): + """Helper for _AddMessageMethods().""" + def ClearField(self, field_name): + try: + field = message_descriptor.fields_by_name[field_name] + except KeyError: + raise ValueError('Protocol message has no "%s" field.' % field_name) + + if field in self._fields: + # Note: If the field is a sub-message, its listener will still point + # at us. That's fine, because the worst than can happen is that it + # will call _Modified() and invalidate our byte size. Big deal. + del self._fields[field] + + # Always call _Modified() -- even if nothing was changed, this is + # a mutating method, and thus calling it should cause the field to become + # present in the parent message. + self._Modified() + + cls.ClearField = ClearField + + +def _AddClearExtensionMethod(cls): + """Helper for _AddMessageMethods().""" + def ClearExtension(self, extension_handle): + _VerifyExtensionHandle(self, extension_handle) + + # Similar to ClearField(), above. + if extension_handle in self._fields: + del self._fields[extension_handle] + self._Modified() + cls.ClearExtension = ClearExtension + + +def _AddClearMethod(message_descriptor, cls): + """Helper for _AddMessageMethods().""" + def Clear(self): + # Clear fields. + self._fields = {} + self._unknown_fields = () + self._Modified() + cls.Clear = Clear + + +def _AddHasExtensionMethod(cls): + """Helper for _AddMessageMethods().""" + def HasExtension(self, extension_handle): + _VerifyExtensionHandle(self, extension_handle) + if extension_handle.label == _FieldDescriptor.LABEL_REPEATED: + raise KeyError('"%s" is repeated.' % extension_handle.full_name) + + if extension_handle.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE: + value = self._fields.get(extension_handle) + return value is not None and value._is_present_in_parent + else: + return extension_handle in self._fields + cls.HasExtension = HasExtension + + +def _AddEqualsMethod(message_descriptor, cls): + """Helper for _AddMessageMethods().""" + def __eq__(self, other): + if (not isinstance(other, message_mod.Message) or + other.DESCRIPTOR != self.DESCRIPTOR): + return False + + if self is other: + return True + + if not self.ListFields() == other.ListFields(): + return False + + # Sort unknown fields because their order shouldn't affect equality test. + unknown_fields = list(self._unknown_fields) + unknown_fields.sort() + other_unknown_fields = list(other._unknown_fields) + other_unknown_fields.sort() + + return unknown_fields == other_unknown_fields + + cls.__eq__ = __eq__ + + +def _AddStrMethod(message_descriptor, cls): + """Helper for _AddMessageMethods().""" + def __str__(self): + return text_format.MessageToString(self) + cls.__str__ = __str__ + + +def _AddUnicodeMethod(unused_message_descriptor, cls): + """Helper for _AddMessageMethods().""" + + def __unicode__(self): + return text_format.MessageToString(self, as_utf8=True).decode('utf-8') + cls.__unicode__ = __unicode__ + + +def _AddSetListenerMethod(cls): + """Helper for _AddMessageMethods().""" + def SetListener(self, listener): + if listener is None: + self._listener = message_listener_mod.NullMessageListener() + else: + self._listener = listener + cls._SetListener = SetListener + + +def _BytesForNonRepeatedElement(value, field_number, field_type): + """Returns the number of bytes needed to serialize a non-repeated element. + The returned byte count includes space for tag information and any + other additional space associated with serializing value. + + Args: + value: Value we're serializing. + field_number: Field number of this value. (Since the field number + is stored as part of a varint-encoded tag, this has an impact + on the total bytes required to serialize the value). + field_type: The type of the field. One of the TYPE_* constants + within FieldDescriptor. + """ + try: + fn = type_checkers.TYPE_TO_BYTE_SIZE_FN[field_type] + return fn(field_number, value) + except KeyError: + raise message_mod.EncodeError('Unrecognized field type: %d' % field_type) + + +def _AddByteSizeMethod(message_descriptor, cls): + """Helper for _AddMessageMethods().""" + + def ByteSize(self): + if not self._cached_byte_size_dirty: + return self._cached_byte_size + + size = 0 + for field_descriptor, field_value in self.ListFields(): + size += field_descriptor._sizer(field_value) + + for tag_bytes, value_bytes in self._unknown_fields: + size += len(tag_bytes) + len(value_bytes) + + self._cached_byte_size = size + self._cached_byte_size_dirty = False + self._listener_for_children.dirty = False + return size + + cls.ByteSize = ByteSize + + +def _AddSerializeToStringMethod(message_descriptor, cls): + """Helper for _AddMessageMethods().""" + + def SerializeToString(self): + # Check if the message has all of its required fields set. + errors = [] + if not self.IsInitialized(): + raise message_mod.EncodeError( + 'Message %s is missing required fields: %s' % ( + self.DESCRIPTOR.full_name, ','.join(self.FindInitializationErrors()))) + return self.SerializePartialToString() + cls.SerializeToString = SerializeToString + + +def _AddSerializePartialToStringMethod(message_descriptor, cls): + """Helper for _AddMessageMethods().""" + + def SerializePartialToString(self): + out = StringIO() + self._InternalSerialize(out.write) + return out.getvalue() + cls.SerializePartialToString = SerializePartialToString + + def InternalSerialize(self, write_bytes): + for field_descriptor, field_value in self.ListFields(): + field_descriptor._encoder(write_bytes, field_value) + for tag_bytes, value_bytes in self._unknown_fields: + write_bytes(tag_bytes) + write_bytes(value_bytes) + cls._InternalSerialize = InternalSerialize + + +def _AddMergeFromStringMethod(message_descriptor, cls): + """Helper for _AddMessageMethods().""" + def MergeFromString(self, serialized): + length = len(serialized) + try: + if self._InternalParse(serialized, 0, length) != length: + # The only reason _InternalParse would return early is if it + # encountered an end-group tag. + raise message_mod.DecodeError('Unexpected end-group tag.') + except IndexError: + raise message_mod.DecodeError('Truncated message.') + except struct.error, e: + raise message_mod.DecodeError(e) + return length # Return this for legacy reasons. + cls.MergeFromString = MergeFromString + + local_ReadTag = decoder.ReadTag + local_SkipField = decoder.SkipField + decoders_by_tag = cls._decoders_by_tag + + def InternalParse(self, buffer, pos, end): + self._Modified() + field_dict = self._fields + unknown_field_list = self._unknown_fields + while pos != end: + (tag_bytes, new_pos) = local_ReadTag(buffer, pos) + field_decoder = decoders_by_tag.get(tag_bytes) + if field_decoder is None: + value_start_pos = new_pos + new_pos = local_SkipField(buffer, new_pos, end, tag_bytes) + if new_pos == -1: + return pos + if not unknown_field_list: + unknown_field_list = self._unknown_fields = [] + unknown_field_list.append((tag_bytes, buffer[value_start_pos:new_pos])) + pos = new_pos + else: + pos = field_decoder(buffer, new_pos, end, self, field_dict) + return pos + cls._InternalParse = InternalParse + + +def _AddIsInitializedMethod(message_descriptor, cls): + """Adds the IsInitialized and FindInitializationError methods to the + protocol message class.""" + + required_fields = [field for field in message_descriptor.fields + if field.label == _FieldDescriptor.LABEL_REQUIRED] + + def IsInitialized(self, errors=None): + """Checks if all required fields of a message are set. + + Args: + errors: A list which, if provided, will be populated with the field + paths of all missing required fields. + + Returns: + True iff the specified message has all required fields set. + """ + + # Performance is critical so we avoid HasField() and ListFields(). + + for field in required_fields: + if (field not in self._fields or + (field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE and + not self._fields[field]._is_present_in_parent)): + if errors is not None: + errors.extend(self.FindInitializationErrors()) + return False + + for field, value in self._fields.iteritems(): + if field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE: + if field.label == _FieldDescriptor.LABEL_REPEATED: + for element in value: + if not element.IsInitialized(): + if errors is not None: + errors.extend(self.FindInitializationErrors()) + return False + elif value._is_present_in_parent and not value.IsInitialized(): + if errors is not None: + errors.extend(self.FindInitializationErrors()) + return False + + return True + + cls.IsInitialized = IsInitialized + + def FindInitializationErrors(self): + """Finds required fields which are not initialized. + + Returns: + A list of strings. Each string is a path to an uninitialized field from + the top-level message, e.g. "foo.bar[5].baz". + """ + + errors = [] # simplify things + + for field in required_fields: + if not self.HasField(field.name): + errors.append(field.name) + + for field, value in self.ListFields(): + if field.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE: + if field.is_extension: + name = "(%s)" % field.full_name + else: + name = field.name + + if field.label == _FieldDescriptor.LABEL_REPEATED: + for i in xrange(len(value)): + element = value[i] + prefix = "%s[%d]." % (name, i) + sub_errors = element.FindInitializationErrors() + errors += [ prefix + error for error in sub_errors ] + else: + prefix = name + "." + sub_errors = value.FindInitializationErrors() + errors += [ prefix + error for error in sub_errors ] + + return errors + + cls.FindInitializationErrors = FindInitializationErrors + + +def _AddMergeFromMethod(cls): + LABEL_REPEATED = _FieldDescriptor.LABEL_REPEATED + CPPTYPE_MESSAGE = _FieldDescriptor.CPPTYPE_MESSAGE + + def MergeFrom(self, msg): + if not isinstance(msg, cls): + raise TypeError( + "Parameter to MergeFrom() must be instance of same class: " + "expected %s got %s." % (cls.__name__, type(msg).__name__)) + + assert msg is not self + self._Modified() + + fields = self._fields + + for field, value in msg._fields.iteritems(): + if field.label == LABEL_REPEATED: + field_value = fields.get(field) + if field_value is None: + # Construct a new object to represent this field. + field_value = field._default_constructor(self) + fields[field] = field_value + field_value.MergeFrom(value) + elif field.cpp_type == CPPTYPE_MESSAGE: + if value._is_present_in_parent: + field_value = fields.get(field) + if field_value is None: + # Construct a new object to represent this field. + field_value = field._default_constructor(self) + fields[field] = field_value + field_value.MergeFrom(value) + else: + self._fields[field] = value + + if msg._unknown_fields: + if not self._unknown_fields: + self._unknown_fields = [] + self._unknown_fields.extend(msg._unknown_fields) + + cls.MergeFrom = MergeFrom + + +def _AddMessageMethods(message_descriptor, cls): + """Adds implementations of all Message methods to cls.""" + _AddListFieldsMethod(message_descriptor, cls) + _AddHasFieldMethod(message_descriptor, cls) + _AddClearFieldMethod(message_descriptor, cls) + if message_descriptor.is_extendable: + _AddClearExtensionMethod(cls) + _AddHasExtensionMethod(cls) + _AddClearMethod(message_descriptor, cls) + _AddEqualsMethod(message_descriptor, cls) + _AddStrMethod(message_descriptor, cls) + _AddUnicodeMethod(message_descriptor, cls) + _AddSetListenerMethod(cls) + _AddByteSizeMethod(message_descriptor, cls) + _AddSerializeToStringMethod(message_descriptor, cls) + _AddSerializePartialToStringMethod(message_descriptor, cls) + _AddMergeFromStringMethod(message_descriptor, cls) + _AddIsInitializedMethod(message_descriptor, cls) + _AddMergeFromMethod(cls) + + +def _AddPrivateHelperMethods(cls): + """Adds implementation of private helper methods to cls.""" + + def Modified(self): + """Sets the _cached_byte_size_dirty bit to true, + and propagates this to our listener iff this was a state change. + """ + + # Note: Some callers check _cached_byte_size_dirty before calling + # _Modified() as an extra optimization. So, if this method is ever + # changed such that it does stuff even when _cached_byte_size_dirty is + # already true, the callers need to be updated. + if not self._cached_byte_size_dirty: + self._cached_byte_size_dirty = True + self._listener_for_children.dirty = True + self._is_present_in_parent = True + self._listener.Modified() + + cls._Modified = Modified + cls.SetInParent = Modified + + +class _Listener(object): + + """MessageListener implementation that a parent message registers with its + child message. + + In order to support semantics like: + + foo.bar.baz.qux = 23 + assert foo.HasField('bar') + + ...child objects must have back references to their parents. + This helper class is at the heart of this support. + """ + + def __init__(self, parent_message): + """Args: + parent_message: The message whose _Modified() method we should call when + we receive Modified() messages. + """ + # This listener establishes a back reference from a child (contained) object + # to its parent (containing) object. We make this a weak reference to avoid + # creating cyclic garbage when the client finishes with the 'parent' object + # in the tree. + if isinstance(parent_message, weakref.ProxyType): + self._parent_message_weakref = parent_message + else: + self._parent_message_weakref = weakref.proxy(parent_message) + + # As an optimization, we also indicate directly on the listener whether + # or not the parent message is dirty. This way we can avoid traversing + # up the tree in the common case. + self.dirty = False + + def Modified(self): + if self.dirty: + return + try: + # Propagate the signal to our parents iff this is the first field set. + self._parent_message_weakref._Modified() + except ReferenceError: + # We can get here if a client has kept a reference to a child object, + # and is now setting a field on it, but the child's parent has been + # garbage-collected. This is not an error. + pass + + +# TODO(robinson): Move elsewhere? This file is getting pretty ridiculous... +# TODO(robinson): Unify error handling of "unknown extension" crap. +# TODO(robinson): Support iteritems()-style iteration over all +# extensions with the "has" bits turned on? +class _ExtensionDict(object): + + """Dict-like container for supporting an indexable "Extensions" + field on proto instances. + + Note that in all cases we expect extension handles to be + FieldDescriptors. + """ + + def __init__(self, extended_message): + """extended_message: Message instance for which we are the Extensions dict. + """ + + self._extended_message = extended_message + + def __getitem__(self, extension_handle): + """Returns the current value of the given extension handle.""" + + _VerifyExtensionHandle(self._extended_message, extension_handle) + + result = self._extended_message._fields.get(extension_handle) + if result is not None: + return result + + if extension_handle.label == _FieldDescriptor.LABEL_REPEATED: + result = extension_handle._default_constructor(self._extended_message) + elif extension_handle.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE: + result = extension_handle.message_type._concrete_class() + try: + result._SetListener(self._extended_message._listener_for_children) + except ReferenceError: + pass + else: + # Singular scalar -- just return the default without inserting into the + # dict. + return extension_handle.default_value + + # Atomically check if another thread has preempted us and, if not, swap + # in the new object we just created. If someone has preempted us, we + # take that object and discard ours. + # WARNING: We are relying on setdefault() being atomic. This is true + # in CPython but we haven't investigated others. This warning appears + # in several other locations in this file. + result = self._extended_message._fields.setdefault( + extension_handle, result) + + return result + + def __eq__(self, other): + if not isinstance(other, self.__class__): + return False + + my_fields = self._extended_message.ListFields() + other_fields = other._extended_message.ListFields() + + # Get rid of non-extension fields. + my_fields = [ field for field in my_fields if field.is_extension ] + other_fields = [ field for field in other_fields if field.is_extension ] + + return my_fields == other_fields + + def __ne__(self, other): + return not self == other + + def __hash__(self): + raise TypeError('unhashable object') + + # Note that this is only meaningful for non-repeated, scalar extension + # fields. Note also that we may have to call _Modified() when we do + # successfully set a field this way, to set any necssary "has" bits in the + # ancestors of the extended message. + def __setitem__(self, extension_handle, value): + """If extension_handle specifies a non-repeated, scalar extension + field, sets the value of that field. + """ + + _VerifyExtensionHandle(self._extended_message, extension_handle) + + if (extension_handle.label == _FieldDescriptor.LABEL_REPEATED or + extension_handle.cpp_type == _FieldDescriptor.CPPTYPE_MESSAGE): + raise TypeError( + 'Cannot assign to extension "%s" because it is a repeated or ' + 'composite type.' % extension_handle.full_name) + + # It's slightly wasteful to lookup the type checker each time, + # but we expect this to be a vanishingly uncommon case anyway. + type_checker = type_checkers.GetTypeChecker( + extension_handle.cpp_type, extension_handle.type) + type_checker.CheckValue(value) + self._extended_message._fields[extension_handle] = value + self._extended_message._Modified() + + def _FindExtensionByName(self, name): + """Tries to find a known extension with the specified name. + + Args: + name: Extension full name. + + Returns: + Extension field descriptor. + """ + return self._extended_message._extensions_by_name.get(name, None) diff --git a/code/push/google/protobuf/internal/reflection_cpp_generated_test.py b/code/push/google/protobuf/internal/reflection_cpp_generated_test.py new file mode 100644 index 0000000..2a0a512 --- /dev/null +++ b/code/push/google/protobuf/internal/reflection_cpp_generated_test.py @@ -0,0 +1,91 @@ +#! /usr/bin/python +# -*- coding: utf-8 -*- +# +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Unittest for reflection.py, which tests the generated C++ implementation.""" + +__author__ = 'jasonh@google.com (Jason Hsueh)' + +import os +os.environ['PROTOCOL_BUFFERS_PYTHON_IMPLEMENTATION'] = 'cpp' + +import unittest +from google.protobuf.internal import api_implementation +from google.protobuf.internal import more_extensions_dynamic_pb2 +from google.protobuf.internal import more_extensions_pb2 +from google.protobuf.internal.reflection_test import * + + +class ReflectionCppTest(unittest.TestCase): + def testImplementationSetting(self): + self.assertEqual('cpp', api_implementation.Type()) + + def testExtensionOfGeneratedTypeInDynamicFile(self): + """Tests that a file built dynamically can extend a generated C++ type. + + The C++ implementation uses a DescriptorPool that has the generated + DescriptorPool as an underlay. Typically, a type can only find + extensions in its own pool. With the python C-extension, the generated C++ + extendee may be available, but not the extension. This tests that the + C-extension implements the correct special handling to make such extensions + available. + """ + pb1 = more_extensions_pb2.ExtendedMessage() + # Test that basic accessors work. + self.assertFalse( + pb1.HasExtension(more_extensions_dynamic_pb2.dynamic_int32_extension)) + self.assertFalse( + pb1.HasExtension(more_extensions_dynamic_pb2.dynamic_message_extension)) + pb1.Extensions[more_extensions_dynamic_pb2.dynamic_int32_extension] = 17 + pb1.Extensions[more_extensions_dynamic_pb2.dynamic_message_extension].a = 24 + self.assertTrue( + pb1.HasExtension(more_extensions_dynamic_pb2.dynamic_int32_extension)) + self.assertTrue( + pb1.HasExtension(more_extensions_dynamic_pb2.dynamic_message_extension)) + + # Now serialize the data and parse to a new message. + pb2 = more_extensions_pb2.ExtendedMessage() + pb2.MergeFromString(pb1.SerializeToString()) + + self.assertTrue( + pb2.HasExtension(more_extensions_dynamic_pb2.dynamic_int32_extension)) + self.assertTrue( + pb2.HasExtension(more_extensions_dynamic_pb2.dynamic_message_extension)) + self.assertEqual( + 17, pb2.Extensions[more_extensions_dynamic_pb2.dynamic_int32_extension]) + self.assertEqual( + 24, + pb2.Extensions[more_extensions_dynamic_pb2.dynamic_message_extension].a) + + +if __name__ == '__main__': + unittest.main() diff --git a/code/push/google/protobuf/internal/reflection_test.py b/code/push/google/protobuf/internal/reflection_test.py new file mode 100644 index 0000000..ed28646 --- /dev/null +++ b/code/push/google/protobuf/internal/reflection_test.py @@ -0,0 +1,2671 @@ +#! /usr/bin/python +# -*- coding: utf-8 -*- +# +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Unittest for reflection.py, which also indirectly tests the output of the +pure-Python protocol compiler. +""" + +__author__ = 'robinson@google.com (Will Robinson)' + +import gc +import operator +import struct + +import unittest +from google.protobuf import unittest_import_pb2 +from google.protobuf import unittest_mset_pb2 +from google.protobuf import unittest_pb2 +from google.protobuf import descriptor_pb2 +from google.protobuf import descriptor +from google.protobuf import message +from google.protobuf import reflection +from google.protobuf.internal import api_implementation +from google.protobuf.internal import more_extensions_pb2 +from google.protobuf.internal import more_messages_pb2 +from google.protobuf.internal import wire_format +from google.protobuf.internal import test_util +from google.protobuf.internal import decoder + + +class _MiniDecoder(object): + """Decodes a stream of values from a string. + + Once upon a time we actually had a class called decoder.Decoder. Then we + got rid of it during a redesign that made decoding much, much faster overall. + But a couple tests in this file used it to check that the serialized form of + a message was correct. So, this class implements just the methods that were + used by said tests, so that we don't have to rewrite the tests. + """ + + def __init__(self, bytes): + self._bytes = bytes + self._pos = 0 + + def ReadVarint(self): + result, self._pos = decoder._DecodeVarint(self._bytes, self._pos) + return result + + ReadInt32 = ReadVarint + ReadInt64 = ReadVarint + ReadUInt32 = ReadVarint + ReadUInt64 = ReadVarint + + def ReadSInt64(self): + return wire_format.ZigZagDecode(self.ReadVarint()) + + ReadSInt32 = ReadSInt64 + + def ReadFieldNumberAndWireType(self): + return wire_format.UnpackTag(self.ReadVarint()) + + def ReadFloat(self): + result = struct.unpack("".', + text_format.Merge, text, message) + + text = 'RepeatedGroup: {' + self.assertRaisesWithMessage( + text_format.ParseError, '1:16 : Expected "}".', + text_format.Merge, text, message) + + def testMergeEmptyGroup(self): + message = unittest_pb2.TestAllTypes() + text = 'OptionalGroup: {}' + text_format.Merge(text, message) + self.assertTrue(message.HasField('optionalgroup')) + + message.Clear() + + message = unittest_pb2.TestAllTypes() + text = 'OptionalGroup: <>' + text_format.Merge(text, message) + self.assertTrue(message.HasField('optionalgroup')) + + def testMergeBadEnumValue(self): + message = unittest_pb2.TestAllTypes() + text = 'optional_nested_enum: BARR' + self.assertRaisesWithMessage( + text_format.ParseError, + ('1:23 : Enum type "protobuf_unittest.TestAllTypes.NestedEnum" ' + 'has no value named BARR.'), + text_format.Merge, text, message) + + message = unittest_pb2.TestAllTypes() + text = 'optional_nested_enum: 100' + self.assertRaisesWithMessage( + text_format.ParseError, + ('1:23 : Enum type "protobuf_unittest.TestAllTypes.NestedEnum" ' + 'has no value with number 100.'), + text_format.Merge, text, message) + + def testMergeBadIntValue(self): + message = unittest_pb2.TestAllTypes() + text = 'optional_int32: bork' + self.assertRaisesWithMessage( + text_format.ParseError, + ('1:17 : Couldn\'t parse integer: bork'), + text_format.Merge, text, message) + + def testMergeStringFieldUnescape(self): + message = unittest_pb2.TestAllTypes() + text = r'''repeated_string: "\xf\x62" + repeated_string: "\\xf\\x62" + repeated_string: "\\\xf\\\x62" + repeated_string: "\\\\xf\\\\x62" + repeated_string: "\\\\\xf\\\\\x62" + repeated_string: "\x5cx20"''' + text_format.Merge(text, message) + + SLASH = '\\' + self.assertEqual('\x0fb', message.repeated_string[0]) + self.assertEqual(SLASH + 'xf' + SLASH + 'x62', message.repeated_string[1]) + self.assertEqual(SLASH + '\x0f' + SLASH + 'b', message.repeated_string[2]) + self.assertEqual(SLASH + SLASH + 'xf' + SLASH + SLASH + 'x62', + message.repeated_string[3]) + self.assertEqual(SLASH + SLASH + '\x0f' + SLASH + SLASH + 'b', + message.repeated_string[4]) + self.assertEqual(SLASH + 'x20', message.repeated_string[5]) + + def assertRaisesWithMessage(self, e_class, e, func, *args, **kwargs): + """Same as assertRaises, but also compares the exception message.""" + if hasattr(e_class, '__name__'): + exc_name = e_class.__name__ + else: + exc_name = str(e_class) + + try: + func(*args, **kwargs) + except e_class as expr: + if str(expr) != e: + msg = '%s raised, but with wrong message: "%s" instead of "%s"' + raise self.failureException(msg % (exc_name, + str(expr).encode('string_escape'), + e.encode('string_escape'))) + return + else: + raise self.failureException('%s not raised' % exc_name) + + +class TokenizerTest(unittest.TestCase): + + def testSimpleTokenCases(self): + text = ('identifier1:"string1"\n \n\n' + 'identifier2 : \n \n123 \n identifier3 :\'string\'\n' + 'identifiER_4 : 1.1e+2 ID5:-0.23 ID6:\'aaaa\\\'bbbb\'\n' + 'ID7 : "aa\\"bb"\n\n\n\n ID8: {A:inf B:-inf C:true D:false}\n' + 'ID9: 22 ID10: -111111111111111111 ID11: -22\n' + 'ID12: 2222222222222222222 ID13: 1.23456f ID14: 1.2e+2f ' + 'false_bool: 0 true_BOOL:t \n true_bool1: 1 false_BOOL1:f ' ) + tokenizer = text_format._Tokenizer(text) + methods = [(tokenizer.ConsumeIdentifier, 'identifier1'), + ':', + (tokenizer.ConsumeString, 'string1'), + (tokenizer.ConsumeIdentifier, 'identifier2'), + ':', + (tokenizer.ConsumeInt32, 123), + (tokenizer.ConsumeIdentifier, 'identifier3'), + ':', + (tokenizer.ConsumeString, 'string'), + (tokenizer.ConsumeIdentifier, 'identifiER_4'), + ':', + (tokenizer.ConsumeFloat, 1.1e+2), + (tokenizer.ConsumeIdentifier, 'ID5'), + ':', + (tokenizer.ConsumeFloat, -0.23), + (tokenizer.ConsumeIdentifier, 'ID6'), + ':', + (tokenizer.ConsumeString, 'aaaa\'bbbb'), + (tokenizer.ConsumeIdentifier, 'ID7'), + ':', + (tokenizer.ConsumeString, 'aa\"bb'), + (tokenizer.ConsumeIdentifier, 'ID8'), + ':', + '{', + (tokenizer.ConsumeIdentifier, 'A'), + ':', + (tokenizer.ConsumeFloat, float('inf')), + (tokenizer.ConsumeIdentifier, 'B'), + ':', + (tokenizer.ConsumeFloat, -float('inf')), + (tokenizer.ConsumeIdentifier, 'C'), + ':', + (tokenizer.ConsumeBool, True), + (tokenizer.ConsumeIdentifier, 'D'), + ':', + (tokenizer.ConsumeBool, False), + '}', + (tokenizer.ConsumeIdentifier, 'ID9'), + ':', + (tokenizer.ConsumeUint32, 22), + (tokenizer.ConsumeIdentifier, 'ID10'), + ':', + (tokenizer.ConsumeInt64, -111111111111111111), + (tokenizer.ConsumeIdentifier, 'ID11'), + ':', + (tokenizer.ConsumeInt32, -22), + (tokenizer.ConsumeIdentifier, 'ID12'), + ':', + (tokenizer.ConsumeUint64, 2222222222222222222), + (tokenizer.ConsumeIdentifier, 'ID13'), + ':', + (tokenizer.ConsumeFloat, 1.23456), + (tokenizer.ConsumeIdentifier, 'ID14'), + ':', + (tokenizer.ConsumeFloat, 1.2e+2), + (tokenizer.ConsumeIdentifier, 'false_bool'), + ':', + (tokenizer.ConsumeBool, False), + (tokenizer.ConsumeIdentifier, 'true_BOOL'), + ':', + (tokenizer.ConsumeBool, True), + (tokenizer.ConsumeIdentifier, 'true_bool1'), + ':', + (tokenizer.ConsumeBool, True), + (tokenizer.ConsumeIdentifier, 'false_BOOL1'), + ':', + (tokenizer.ConsumeBool, False)] + + i = 0 + while not tokenizer.AtEnd(): + m = methods[i] + if type(m) == str: + token = tokenizer.token + self.assertEqual(token, m) + tokenizer.NextToken() + else: + self.assertEqual(m[1], m[0]()) + i += 1 + + def testConsumeIntegers(self): + # This test only tests the failures in the integer parsing methods as well + # as the '0' special cases. + int64_max = (1 << 63) - 1 + uint32_max = (1 << 32) - 1 + text = '-1 %d %d' % (uint32_max + 1, int64_max + 1) + tokenizer = text_format._Tokenizer(text) + self.assertRaises(text_format.ParseError, tokenizer.ConsumeUint32) + self.assertRaises(text_format.ParseError, tokenizer.ConsumeUint64) + self.assertEqual(-1, tokenizer.ConsumeInt32()) + + self.assertRaises(text_format.ParseError, tokenizer.ConsumeUint32) + self.assertRaises(text_format.ParseError, tokenizer.ConsumeInt32) + self.assertEqual(uint32_max + 1, tokenizer.ConsumeInt64()) + + self.assertRaises(text_format.ParseError, tokenizer.ConsumeInt64) + self.assertEqual(int64_max + 1, tokenizer.ConsumeUint64()) + self.assertTrue(tokenizer.AtEnd()) + + text = '-0 -0 0 0' + tokenizer = text_format._Tokenizer(text) + self.assertEqual(0, tokenizer.ConsumeUint32()) + self.assertEqual(0, tokenizer.ConsumeUint64()) + self.assertEqual(0, tokenizer.ConsumeUint32()) + self.assertEqual(0, tokenizer.ConsumeUint64()) + self.assertTrue(tokenizer.AtEnd()) + + def testConsumeByteString(self): + text = '"string1\'' + tokenizer = text_format._Tokenizer(text) + self.assertRaises(text_format.ParseError, tokenizer.ConsumeByteString) + + text = 'string1"' + tokenizer = text_format._Tokenizer(text) + self.assertRaises(text_format.ParseError, tokenizer.ConsumeByteString) + + text = '\n"\\xt"' + tokenizer = text_format._Tokenizer(text) + self.assertRaises(text_format.ParseError, tokenizer.ConsumeByteString) + + text = '\n"\\"' + tokenizer = text_format._Tokenizer(text) + self.assertRaises(text_format.ParseError, tokenizer.ConsumeByteString) + + text = '\n"\\x"' + tokenizer = text_format._Tokenizer(text) + self.assertRaises(text_format.ParseError, tokenizer.ConsumeByteString) + + def testConsumeBool(self): + text = 'not-a-bool' + tokenizer = text_format._Tokenizer(text) + self.assertRaises(text_format.ParseError, tokenizer.ConsumeBool) + + +if __name__ == '__main__': + unittest.main() diff --git a/code/push/google/protobuf/internal/type_checkers.py b/code/push/google/protobuf/internal/type_checkers.py new file mode 100644 index 0000000..09bf5e4 --- /dev/null +++ b/code/push/google/protobuf/internal/type_checkers.py @@ -0,0 +1,286 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Provides type checking routines. + +This module defines type checking utilities in the forms of dictionaries: + +VALUE_CHECKERS: A dictionary of field types and a value validation object. +TYPE_TO_BYTE_SIZE_FN: A dictionary with field types and a size computing + function. +TYPE_TO_SERIALIZE_METHOD: A dictionary with field types and serialization + function. +FIELD_TYPE_TO_WIRE_TYPE: A dictionary with field typed and their + coresponding wire types. +TYPE_TO_DESERIALIZE_METHOD: A dictionary with field types and deserialization + function. +""" + +__author__ = 'robinson@google.com (Will Robinson)' + +from push.google.protobuf.internal import decoder +from push.google.protobuf.internal import encoder +from push.google.protobuf.internal import wire_format +from push.google.protobuf import descriptor + +_FieldDescriptor = descriptor.FieldDescriptor + + +def GetTypeChecker(cpp_type, field_type): + """Returns a type checker for a message field of the specified types. + + Args: + cpp_type: C++ type of the field (see descriptor.py). + field_type: Protocol message field type (see descriptor.py). + + Returns: + An instance of TypeChecker which can be used to verify the types + of values assigned to a field of the specified type. + """ + if (cpp_type == _FieldDescriptor.CPPTYPE_STRING and + field_type == _FieldDescriptor.TYPE_STRING): + return UnicodeValueChecker() + return _VALUE_CHECKERS[cpp_type] + + +# None of the typecheckers below make any attempt to guard against people +# subclassing builtin types and doing weird things. We're not trying to +# protect against malicious clients here, just people accidentally shooting +# themselves in the foot in obvious ways. + +class TypeChecker(object): + + """Type checker used to catch type errors as early as possible + when the client is setting scalar fields in protocol messages. + """ + + def __init__(self, *acceptable_types): + self._acceptable_types = acceptable_types + + def CheckValue(self, proposed_value): + if not isinstance(proposed_value, self._acceptable_types): + message = ('%.1024r has type %s, but expected one of: %s' % + (proposed_value, type(proposed_value), self._acceptable_types)) + raise TypeError(message) + + +# IntValueChecker and its subclasses perform integer type-checks +# and bounds-checks. +class IntValueChecker(object): + + """Checker used for integer fields. Performs type-check and range check.""" + + def CheckValue(self, proposed_value): + if not isinstance(proposed_value, (int, long)): + message = ('%.1024r has type %s, but expected one of: %s' % + (proposed_value, type(proposed_value), (int, long))) + raise TypeError(message) + if not self._MIN <= proposed_value <= self._MAX: + raise ValueError('Value out of range: %d' % proposed_value) + + +class UnicodeValueChecker(object): + + """Checker used for string fields.""" + + def CheckValue(self, proposed_value): + if not isinstance(proposed_value, (str, unicode)): + message = ('%.1024r has type %s, but expected one of: %s' % + (proposed_value, type(proposed_value), (str, unicode))) + raise TypeError(message) + + # If the value is of type 'str' make sure that it is in 7-bit ASCII + # encoding. + if isinstance(proposed_value, str): + try: + unicode(proposed_value, 'ascii') + except UnicodeDecodeError: + raise ValueError('%.1024r has type str, but isn\'t in 7-bit ASCII ' + 'encoding. Non-ASCII strings must be converted to ' + 'unicode objects before being added.' % + (proposed_value)) + + +class Int32ValueChecker(IntValueChecker): + # We're sure to use ints instead of longs here since comparison may be more + # efficient. + _MIN = -2147483648 + _MAX = 2147483647 + + +class Uint32ValueChecker(IntValueChecker): + _MIN = 0 + _MAX = (1 << 32) - 1 + + +class Int64ValueChecker(IntValueChecker): + _MIN = -(1 << 63) + _MAX = (1 << 63) - 1 + + +class Uint64ValueChecker(IntValueChecker): + _MIN = 0 + _MAX = (1 << 64) - 1 + + +# Type-checkers for all scalar CPPTYPEs. +_VALUE_CHECKERS = { + _FieldDescriptor.CPPTYPE_INT32: Int32ValueChecker(), + _FieldDescriptor.CPPTYPE_INT64: Int64ValueChecker(), + _FieldDescriptor.CPPTYPE_UINT32: Uint32ValueChecker(), + _FieldDescriptor.CPPTYPE_UINT64: Uint64ValueChecker(), + _FieldDescriptor.CPPTYPE_DOUBLE: TypeChecker( + float, int, long), + _FieldDescriptor.CPPTYPE_FLOAT: TypeChecker( + float, int, long), + _FieldDescriptor.CPPTYPE_BOOL: TypeChecker(bool, int), + _FieldDescriptor.CPPTYPE_ENUM: Int32ValueChecker(), + _FieldDescriptor.CPPTYPE_STRING: TypeChecker(str), + } + + +# Map from field type to a function F, such that F(field_num, value) +# gives the total byte size for a value of the given type. This +# byte size includes tag information and any other additional space +# associated with serializing "value". +TYPE_TO_BYTE_SIZE_FN = { + _FieldDescriptor.TYPE_DOUBLE: wire_format.DoubleByteSize, + _FieldDescriptor.TYPE_FLOAT: wire_format.FloatByteSize, + _FieldDescriptor.TYPE_INT64: wire_format.Int64ByteSize, + _FieldDescriptor.TYPE_UINT64: wire_format.UInt64ByteSize, + _FieldDescriptor.TYPE_INT32: wire_format.Int32ByteSize, + _FieldDescriptor.TYPE_FIXED64: wire_format.Fixed64ByteSize, + _FieldDescriptor.TYPE_FIXED32: wire_format.Fixed32ByteSize, + _FieldDescriptor.TYPE_BOOL: wire_format.BoolByteSize, + _FieldDescriptor.TYPE_STRING: wire_format.StringByteSize, + _FieldDescriptor.TYPE_GROUP: wire_format.GroupByteSize, + _FieldDescriptor.TYPE_MESSAGE: wire_format.MessageByteSize, + _FieldDescriptor.TYPE_BYTES: wire_format.BytesByteSize, + _FieldDescriptor.TYPE_UINT32: wire_format.UInt32ByteSize, + _FieldDescriptor.TYPE_ENUM: wire_format.EnumByteSize, + _FieldDescriptor.TYPE_SFIXED32: wire_format.SFixed32ByteSize, + _FieldDescriptor.TYPE_SFIXED64: wire_format.SFixed64ByteSize, + _FieldDescriptor.TYPE_SINT32: wire_format.SInt32ByteSize, + _FieldDescriptor.TYPE_SINT64: wire_format.SInt64ByteSize + } + + +# Maps from field types to encoder constructors. +TYPE_TO_ENCODER = { + _FieldDescriptor.TYPE_DOUBLE: encoder.DoubleEncoder, + _FieldDescriptor.TYPE_FLOAT: encoder.FloatEncoder, + _FieldDescriptor.TYPE_INT64: encoder.Int64Encoder, + _FieldDescriptor.TYPE_UINT64: encoder.UInt64Encoder, + _FieldDescriptor.TYPE_INT32: encoder.Int32Encoder, + _FieldDescriptor.TYPE_FIXED64: encoder.Fixed64Encoder, + _FieldDescriptor.TYPE_FIXED32: encoder.Fixed32Encoder, + _FieldDescriptor.TYPE_BOOL: encoder.BoolEncoder, + _FieldDescriptor.TYPE_STRING: encoder.StringEncoder, + _FieldDescriptor.TYPE_GROUP: encoder.GroupEncoder, + _FieldDescriptor.TYPE_MESSAGE: encoder.MessageEncoder, + _FieldDescriptor.TYPE_BYTES: encoder.BytesEncoder, + _FieldDescriptor.TYPE_UINT32: encoder.UInt32Encoder, + _FieldDescriptor.TYPE_ENUM: encoder.EnumEncoder, + _FieldDescriptor.TYPE_SFIXED32: encoder.SFixed32Encoder, + _FieldDescriptor.TYPE_SFIXED64: encoder.SFixed64Encoder, + _FieldDescriptor.TYPE_SINT32: encoder.SInt32Encoder, + _FieldDescriptor.TYPE_SINT64: encoder.SInt64Encoder, + } + + +# Maps from field types to sizer constructors. +TYPE_TO_SIZER = { + _FieldDescriptor.TYPE_DOUBLE: encoder.DoubleSizer, + _FieldDescriptor.TYPE_FLOAT: encoder.FloatSizer, + _FieldDescriptor.TYPE_INT64: encoder.Int64Sizer, + _FieldDescriptor.TYPE_UINT64: encoder.UInt64Sizer, + _FieldDescriptor.TYPE_INT32: encoder.Int32Sizer, + _FieldDescriptor.TYPE_FIXED64: encoder.Fixed64Sizer, + _FieldDescriptor.TYPE_FIXED32: encoder.Fixed32Sizer, + _FieldDescriptor.TYPE_BOOL: encoder.BoolSizer, + _FieldDescriptor.TYPE_STRING: encoder.StringSizer, + _FieldDescriptor.TYPE_GROUP: encoder.GroupSizer, + _FieldDescriptor.TYPE_MESSAGE: encoder.MessageSizer, + _FieldDescriptor.TYPE_BYTES: encoder.BytesSizer, + _FieldDescriptor.TYPE_UINT32: encoder.UInt32Sizer, + _FieldDescriptor.TYPE_ENUM: encoder.EnumSizer, + _FieldDescriptor.TYPE_SFIXED32: encoder.SFixed32Sizer, + _FieldDescriptor.TYPE_SFIXED64: encoder.SFixed64Sizer, + _FieldDescriptor.TYPE_SINT32: encoder.SInt32Sizer, + _FieldDescriptor.TYPE_SINT64: encoder.SInt64Sizer, + } + + +# Maps from field type to a decoder constructor. +TYPE_TO_DECODER = { + _FieldDescriptor.TYPE_DOUBLE: decoder.DoubleDecoder, + _FieldDescriptor.TYPE_FLOAT: decoder.FloatDecoder, + _FieldDescriptor.TYPE_INT64: decoder.Int64Decoder, + _FieldDescriptor.TYPE_UINT64: decoder.UInt64Decoder, + _FieldDescriptor.TYPE_INT32: decoder.Int32Decoder, + _FieldDescriptor.TYPE_FIXED64: decoder.Fixed64Decoder, + _FieldDescriptor.TYPE_FIXED32: decoder.Fixed32Decoder, + _FieldDescriptor.TYPE_BOOL: decoder.BoolDecoder, + _FieldDescriptor.TYPE_STRING: decoder.StringDecoder, + _FieldDescriptor.TYPE_GROUP: decoder.GroupDecoder, + _FieldDescriptor.TYPE_MESSAGE: decoder.MessageDecoder, + _FieldDescriptor.TYPE_BYTES: decoder.BytesDecoder, + _FieldDescriptor.TYPE_UINT32: decoder.UInt32Decoder, + _FieldDescriptor.TYPE_ENUM: decoder.EnumDecoder, + _FieldDescriptor.TYPE_SFIXED32: decoder.SFixed32Decoder, + _FieldDescriptor.TYPE_SFIXED64: decoder.SFixed64Decoder, + _FieldDescriptor.TYPE_SINT32: decoder.SInt32Decoder, + _FieldDescriptor.TYPE_SINT64: decoder.SInt64Decoder, + } + +# Maps from field type to expected wiretype. +FIELD_TYPE_TO_WIRE_TYPE = { + _FieldDescriptor.TYPE_DOUBLE: wire_format.WIRETYPE_FIXED64, + _FieldDescriptor.TYPE_FLOAT: wire_format.WIRETYPE_FIXED32, + _FieldDescriptor.TYPE_INT64: wire_format.WIRETYPE_VARINT, + _FieldDescriptor.TYPE_UINT64: wire_format.WIRETYPE_VARINT, + _FieldDescriptor.TYPE_INT32: wire_format.WIRETYPE_VARINT, + _FieldDescriptor.TYPE_FIXED64: wire_format.WIRETYPE_FIXED64, + _FieldDescriptor.TYPE_FIXED32: wire_format.WIRETYPE_FIXED32, + _FieldDescriptor.TYPE_BOOL: wire_format.WIRETYPE_VARINT, + _FieldDescriptor.TYPE_STRING: + wire_format.WIRETYPE_LENGTH_DELIMITED, + _FieldDescriptor.TYPE_GROUP: wire_format.WIRETYPE_START_GROUP, + _FieldDescriptor.TYPE_MESSAGE: + wire_format.WIRETYPE_LENGTH_DELIMITED, + _FieldDescriptor.TYPE_BYTES: + wire_format.WIRETYPE_LENGTH_DELIMITED, + _FieldDescriptor.TYPE_UINT32: wire_format.WIRETYPE_VARINT, + _FieldDescriptor.TYPE_ENUM: wire_format.WIRETYPE_VARINT, + _FieldDescriptor.TYPE_SFIXED32: wire_format.WIRETYPE_FIXED32, + _FieldDescriptor.TYPE_SFIXED64: wire_format.WIRETYPE_FIXED64, + _FieldDescriptor.TYPE_SINT32: wire_format.WIRETYPE_VARINT, + _FieldDescriptor.TYPE_SINT64: wire_format.WIRETYPE_VARINT, + } diff --git a/code/push/google/protobuf/internal/unknown_fields_test.py b/code/push/google/protobuf/internal/unknown_fields_test.py new file mode 100644 index 0000000..84984b4 --- /dev/null +++ b/code/push/google/protobuf/internal/unknown_fields_test.py @@ -0,0 +1,170 @@ +#! /usr/bin/python +# -*- coding: utf-8 -*- +# +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Test for preservation of unknown fields in the pure Python implementation.""" + +__author__ = 'bohdank@google.com (Bohdan Koval)' + +import unittest +from google.protobuf import unittest_mset_pb2 +from google.protobuf import unittest_pb2 +from google.protobuf.internal import encoder +from google.protobuf.internal import test_util +from google.protobuf.internal import type_checkers + + +class UnknownFieldsTest(unittest.TestCase): + + def setUp(self): + self.descriptor = unittest_pb2.TestAllTypes.DESCRIPTOR + self.all_fields = unittest_pb2.TestAllTypes() + test_util.SetAllFields(self.all_fields) + self.all_fields_data = self.all_fields.SerializeToString() + self.empty_message = unittest_pb2.TestEmptyMessage() + self.empty_message.ParseFromString(self.all_fields_data) + self.unknown_fields = self.empty_message._unknown_fields + + def GetField(self, name): + field_descriptor = self.descriptor.fields_by_name[name] + wire_type = type_checkers.FIELD_TYPE_TO_WIRE_TYPE[field_descriptor.type] + field_tag = encoder.TagBytes(field_descriptor.number, wire_type) + for tag_bytes, value in self.unknown_fields: + if tag_bytes == field_tag: + decoder = unittest_pb2.TestAllTypes._decoders_by_tag[tag_bytes] + result_dict = {} + decoder(value, 0, len(value), self.all_fields, result_dict) + return result_dict[field_descriptor] + + def testVarint(self): + value = self.GetField('optional_int32') + self.assertEqual(self.all_fields.optional_int32, value) + + def testFixed32(self): + value = self.GetField('optional_fixed32') + self.assertEqual(self.all_fields.optional_fixed32, value) + + def testFixed64(self): + value = self.GetField('optional_fixed64') + self.assertEqual(self.all_fields.optional_fixed64, value) + + def testLengthDelimited(self): + value = self.GetField('optional_string') + self.assertEqual(self.all_fields.optional_string, value) + + def testGroup(self): + value = self.GetField('optionalgroup') + self.assertEqual(self.all_fields.optionalgroup, value) + + def testSerialize(self): + data = self.empty_message.SerializeToString() + + # Don't use assertEqual because we don't want to dump raw binary data to + # stdout. + self.assertTrue(data == self.all_fields_data) + + def testCopyFrom(self): + message = unittest_pb2.TestEmptyMessage() + message.CopyFrom(self.empty_message) + self.assertEqual(self.unknown_fields, message._unknown_fields) + + def testMergeFrom(self): + message = unittest_pb2.TestAllTypes() + message.optional_int32 = 1 + message.optional_uint32 = 2 + source = unittest_pb2.TestEmptyMessage() + source.ParseFromString(message.SerializeToString()) + + message.ClearField('optional_int32') + message.optional_int64 = 3 + message.optional_uint32 = 4 + destination = unittest_pb2.TestEmptyMessage() + destination.ParseFromString(message.SerializeToString()) + unknown_fields = destination._unknown_fields[:] + + destination.MergeFrom(source) + self.assertEqual(unknown_fields + source._unknown_fields, + destination._unknown_fields) + + def testClear(self): + self.empty_message.Clear() + self.assertEqual(0, len(self.empty_message._unknown_fields)) + + def testByteSize(self): + self.assertEqual(self.all_fields.ByteSize(), self.empty_message.ByteSize()) + + def testUnknownExtensions(self): + message = unittest_pb2.TestEmptyMessageWithExtensions() + message.ParseFromString(self.all_fields_data) + self.assertEqual(self.empty_message._unknown_fields, + message._unknown_fields) + + def testListFields(self): + # Make sure ListFields doesn't return unknown fields. + self.assertEqual(0, len(self.empty_message.ListFields())) + + def testSerializeMessageSetWireFormatUnknownExtension(self): + # Create a message using the message set wire format with an unknown + # message. + raw = unittest_mset_pb2.RawMessageSet() + + # Add an unknown extension. + item = raw.item.add() + item.type_id = 1545009 + message1 = unittest_mset_pb2.TestMessageSetExtension1() + message1.i = 12345 + item.message = message1.SerializeToString() + + serialized = raw.SerializeToString() + + # Parse message using the message set wire format. + proto = unittest_mset_pb2.TestMessageSet() + proto.MergeFromString(serialized) + + # Verify that the unknown extension is serialized unchanged + reserialized = proto.SerializeToString() + new_raw = unittest_mset_pb2.RawMessageSet() + new_raw.MergeFromString(reserialized) + self.assertEqual(raw, new_raw) + + def testEquals(self): + message = unittest_pb2.TestEmptyMessage() + message.ParseFromString(self.all_fields_data) + self.assertEqual(self.empty_message, message) + + self.all_fields.ClearField('optional_string') + message.ParseFromString(self.all_fields.SerializeToString()) + self.assertNotEqual(self.empty_message, message) + + +if __name__ == '__main__': + unittest.main() diff --git a/code/push/google/protobuf/internal/wire_format.py b/code/push/google/protobuf/internal/wire_format.py new file mode 100644 index 0000000..ef73377 --- /dev/null +++ b/code/push/google/protobuf/internal/wire_format.py @@ -0,0 +1,268 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Constants and static functions to support protocol buffer wire format.""" + +__author__ = 'robinson@google.com (Will Robinson)' + +import struct +from push.google.protobuf import descriptor +from push.google.protobuf import message + + +TAG_TYPE_BITS = 3 # Number of bits used to hold type info in a proto tag. +TAG_TYPE_MASK = (1 << TAG_TYPE_BITS) - 1 # 0x7 + +# These numbers identify the wire type of a protocol buffer value. +# We use the least-significant TAG_TYPE_BITS bits of the varint-encoded +# tag-and-type to store one of these WIRETYPE_* constants. +# These values must match WireType enum in google/protobuf/wire_format.h. +WIRETYPE_VARINT = 0 +WIRETYPE_FIXED64 = 1 +WIRETYPE_LENGTH_DELIMITED = 2 +WIRETYPE_START_GROUP = 3 +WIRETYPE_END_GROUP = 4 +WIRETYPE_FIXED32 = 5 +_WIRETYPE_MAX = 5 + + +# Bounds for various integer types. +INT32_MAX = int((1 << 31) - 1) +INT32_MIN = int(-(1 << 31)) +UINT32_MAX = (1 << 32) - 1 + +INT64_MAX = (1 << 63) - 1 +INT64_MIN = -(1 << 63) +UINT64_MAX = (1 << 64) - 1 + +# "struct" format strings that will encode/decode the specified formats. +FORMAT_UINT32_LITTLE_ENDIAN = '> TAG_TYPE_BITS), (tag & TAG_TYPE_MASK) + + +def ZigZagEncode(value): + """ZigZag Transform: Encodes signed integers so that they can be + effectively used with varint encoding. See wire_format.h for + more details. + """ + if value >= 0: + return value << 1 + return (value << 1) ^ (~0) + + +def ZigZagDecode(value): + """Inverse of ZigZagEncode().""" + if not value & 0x1: + return value >> 1 + return (value >> 1) ^ (~0) + + + +# The *ByteSize() functions below return the number of bytes required to +# serialize "field number + type" information and then serialize the value. + + +def Int32ByteSize(field_number, int32): + return Int64ByteSize(field_number, int32) + + +def Int32ByteSizeNoTag(int32): + return _VarUInt64ByteSizeNoTag(0xffffffffffffffff & int32) + + +def Int64ByteSize(field_number, int64): + # Have to convert to uint before calling UInt64ByteSize(). + return UInt64ByteSize(field_number, 0xffffffffffffffff & int64) + + +def UInt32ByteSize(field_number, uint32): + return UInt64ByteSize(field_number, uint32) + + +def UInt64ByteSize(field_number, uint64): + return TagByteSize(field_number) + _VarUInt64ByteSizeNoTag(uint64) + + +def SInt32ByteSize(field_number, int32): + return UInt32ByteSize(field_number, ZigZagEncode(int32)) + + +def SInt64ByteSize(field_number, int64): + return UInt64ByteSize(field_number, ZigZagEncode(int64)) + + +def Fixed32ByteSize(field_number, fixed32): + return TagByteSize(field_number) + 4 + + +def Fixed64ByteSize(field_number, fixed64): + return TagByteSize(field_number) + 8 + + +def SFixed32ByteSize(field_number, sfixed32): + return TagByteSize(field_number) + 4 + + +def SFixed64ByteSize(field_number, sfixed64): + return TagByteSize(field_number) + 8 + + +def FloatByteSize(field_number, flt): + return TagByteSize(field_number) + 4 + + +def DoubleByteSize(field_number, double): + return TagByteSize(field_number) + 8 + + +def BoolByteSize(field_number, b): + return TagByteSize(field_number) + 1 + + +def EnumByteSize(field_number, enum): + return UInt32ByteSize(field_number, enum) + + +def StringByteSize(field_number, string): + return BytesByteSize(field_number, string.encode('utf-8')) + + +def BytesByteSize(field_number, b): + return (TagByteSize(field_number) + + _VarUInt64ByteSizeNoTag(len(b)) + + len(b)) + + +def GroupByteSize(field_number, message): + return (2 * TagByteSize(field_number) # START and END group. + + message.ByteSize()) + + +def MessageByteSize(field_number, message): + return (TagByteSize(field_number) + + _VarUInt64ByteSizeNoTag(message.ByteSize()) + + message.ByteSize()) + + +def MessageSetItemByteSize(field_number, msg): + # First compute the sizes of the tags. + # There are 2 tags for the beginning and ending of the repeated group, that + # is field number 1, one with field number 2 (type_id) and one with field + # number 3 (message). + total_size = (2 * TagByteSize(1) + TagByteSize(2) + TagByteSize(3)) + + # Add the number of bytes for type_id. + total_size += _VarUInt64ByteSizeNoTag(field_number) + + message_size = msg.ByteSize() + + # The number of bytes for encoding the length of the message. + total_size += _VarUInt64ByteSizeNoTag(message_size) + + # The size of the message. + total_size += message_size + return total_size + + +def TagByteSize(field_number): + """Returns the bytes required to serialize a tag with this field number.""" + # Just pass in type 0, since the type won't affect the tag+type size. + return _VarUInt64ByteSizeNoTag(PackTag(field_number, 0)) + + +# Private helper function for the *ByteSize() functions above. + +def _VarUInt64ByteSizeNoTag(uint64): + """Returns the number of bytes required to serialize a single varint + using boundary value comparisons. (unrolled loop optimization -WPierce) + uint64 must be unsigned. + """ + if uint64 <= 0x7f: return 1 + if uint64 <= 0x3fff: return 2 + if uint64 <= 0x1fffff: return 3 + if uint64 <= 0xfffffff: return 4 + if uint64 <= 0x7ffffffff: return 5 + if uint64 <= 0x3ffffffffff: return 6 + if uint64 <= 0x1ffffffffffff: return 7 + if uint64 <= 0xffffffffffffff: return 8 + if uint64 <= 0x7fffffffffffffff: return 9 + if uint64 > UINT64_MAX: + raise message.EncodeError('Value out of range: %d' % uint64) + return 10 + + +NON_PACKABLE_TYPES = ( + descriptor.FieldDescriptor.TYPE_STRING, + descriptor.FieldDescriptor.TYPE_GROUP, + descriptor.FieldDescriptor.TYPE_MESSAGE, + descriptor.FieldDescriptor.TYPE_BYTES +) + + +def IsTypePackable(field_type): + """Return true iff packable = true is valid for fields of this type. + + Args: + field_type: a FieldDescriptor::Type value. + + Returns: + True iff fields of this type are packable. + """ + return field_type not in NON_PACKABLE_TYPES diff --git a/code/push/google/protobuf/internal/wire_format_test.py b/code/push/google/protobuf/internal/wire_format_test.py new file mode 100644 index 0000000..7600778 --- /dev/null +++ b/code/push/google/protobuf/internal/wire_format_test.py @@ -0,0 +1,253 @@ +#! /usr/bin/python +# +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Test for google.protobuf.internal.wire_format.""" + +__author__ = 'robinson@google.com (Will Robinson)' + +import unittest +from google.protobuf import message +from google.protobuf.internal import wire_format + + +class WireFormatTest(unittest.TestCase): + + def testPackTag(self): + field_number = 0xabc + tag_type = 2 + self.assertEqual((field_number << 3) | tag_type, + wire_format.PackTag(field_number, tag_type)) + PackTag = wire_format.PackTag + # Number too high. + self.assertRaises(message.EncodeError, PackTag, field_number, 6) + # Number too low. + self.assertRaises(message.EncodeError, PackTag, field_number, -1) + + def testUnpackTag(self): + # Test field numbers that will require various varint sizes. + for expected_field_number in (1, 15, 16, 2047, 2048): + for expected_wire_type in range(6): # Highest-numbered wiretype is 5. + field_number, wire_type = wire_format.UnpackTag( + wire_format.PackTag(expected_field_number, expected_wire_type)) + self.assertEqual(expected_field_number, field_number) + self.assertEqual(expected_wire_type, wire_type) + + self.assertRaises(TypeError, wire_format.UnpackTag, None) + self.assertRaises(TypeError, wire_format.UnpackTag, 'abc') + self.assertRaises(TypeError, wire_format.UnpackTag, 0.0) + self.assertRaises(TypeError, wire_format.UnpackTag, object()) + + def testZigZagEncode(self): + Z = wire_format.ZigZagEncode + self.assertEqual(0, Z(0)) + self.assertEqual(1, Z(-1)) + self.assertEqual(2, Z(1)) + self.assertEqual(3, Z(-2)) + self.assertEqual(4, Z(2)) + self.assertEqual(0xfffffffe, Z(0x7fffffff)) + self.assertEqual(0xffffffff, Z(-0x80000000)) + self.assertEqual(0xfffffffffffffffe, Z(0x7fffffffffffffff)) + self.assertEqual(0xffffffffffffffff, Z(-0x8000000000000000)) + + self.assertRaises(TypeError, Z, None) + self.assertRaises(TypeError, Z, 'abcd') + self.assertRaises(TypeError, Z, 0.0) + self.assertRaises(TypeError, Z, object()) + + def testZigZagDecode(self): + Z = wire_format.ZigZagDecode + self.assertEqual(0, Z(0)) + self.assertEqual(-1, Z(1)) + self.assertEqual(1, Z(2)) + self.assertEqual(-2, Z(3)) + self.assertEqual(2, Z(4)) + self.assertEqual(0x7fffffff, Z(0xfffffffe)) + self.assertEqual(-0x80000000, Z(0xffffffff)) + self.assertEqual(0x7fffffffffffffff, Z(0xfffffffffffffffe)) + self.assertEqual(-0x8000000000000000, Z(0xffffffffffffffff)) + + self.assertRaises(TypeError, Z, None) + self.assertRaises(TypeError, Z, 'abcd') + self.assertRaises(TypeError, Z, 0.0) + self.assertRaises(TypeError, Z, object()) + + def NumericByteSizeTestHelper(self, byte_size_fn, value, expected_value_size): + # Use field numbers that cause various byte sizes for the tag information. + for field_number, tag_bytes in ((15, 1), (16, 2), (2047, 2), (2048, 3)): + expected_size = expected_value_size + tag_bytes + actual_size = byte_size_fn(field_number, value) + self.assertEqual(expected_size, actual_size, + 'byte_size_fn: %s, field_number: %d, value: %r\n' + 'Expected: %d, Actual: %d'% ( + byte_size_fn, field_number, value, expected_size, actual_size)) + + def testByteSizeFunctions(self): + # Test all numeric *ByteSize() functions. + NUMERIC_ARGS = [ + # Int32ByteSize(). + [wire_format.Int32ByteSize, 0, 1], + [wire_format.Int32ByteSize, 127, 1], + [wire_format.Int32ByteSize, 128, 2], + [wire_format.Int32ByteSize, -1, 10], + # Int64ByteSize(). + [wire_format.Int64ByteSize, 0, 1], + [wire_format.Int64ByteSize, 127, 1], + [wire_format.Int64ByteSize, 128, 2], + [wire_format.Int64ByteSize, -1, 10], + # UInt32ByteSize(). + [wire_format.UInt32ByteSize, 0, 1], + [wire_format.UInt32ByteSize, 127, 1], + [wire_format.UInt32ByteSize, 128, 2], + [wire_format.UInt32ByteSize, wire_format.UINT32_MAX, 5], + # UInt64ByteSize(). + [wire_format.UInt64ByteSize, 0, 1], + [wire_format.UInt64ByteSize, 127, 1], + [wire_format.UInt64ByteSize, 128, 2], + [wire_format.UInt64ByteSize, wire_format.UINT64_MAX, 10], + # SInt32ByteSize(). + [wire_format.SInt32ByteSize, 0, 1], + [wire_format.SInt32ByteSize, -1, 1], + [wire_format.SInt32ByteSize, 1, 1], + [wire_format.SInt32ByteSize, -63, 1], + [wire_format.SInt32ByteSize, 63, 1], + [wire_format.SInt32ByteSize, -64, 1], + [wire_format.SInt32ByteSize, 64, 2], + # SInt64ByteSize(). + [wire_format.SInt64ByteSize, 0, 1], + [wire_format.SInt64ByteSize, -1, 1], + [wire_format.SInt64ByteSize, 1, 1], + [wire_format.SInt64ByteSize, -63, 1], + [wire_format.SInt64ByteSize, 63, 1], + [wire_format.SInt64ByteSize, -64, 1], + [wire_format.SInt64ByteSize, 64, 2], + # Fixed32ByteSize(). + [wire_format.Fixed32ByteSize, 0, 4], + [wire_format.Fixed32ByteSize, wire_format.UINT32_MAX, 4], + # Fixed64ByteSize(). + [wire_format.Fixed64ByteSize, 0, 8], + [wire_format.Fixed64ByteSize, wire_format.UINT64_MAX, 8], + # SFixed32ByteSize(). + [wire_format.SFixed32ByteSize, 0, 4], + [wire_format.SFixed32ByteSize, wire_format.INT32_MIN, 4], + [wire_format.SFixed32ByteSize, wire_format.INT32_MAX, 4], + # SFixed64ByteSize(). + [wire_format.SFixed64ByteSize, 0, 8], + [wire_format.SFixed64ByteSize, wire_format.INT64_MIN, 8], + [wire_format.SFixed64ByteSize, wire_format.INT64_MAX, 8], + # FloatByteSize(). + [wire_format.FloatByteSize, 0.0, 4], + [wire_format.FloatByteSize, 1000000000.0, 4], + [wire_format.FloatByteSize, -1000000000.0, 4], + # DoubleByteSize(). + [wire_format.DoubleByteSize, 0.0, 8], + [wire_format.DoubleByteSize, 1000000000.0, 8], + [wire_format.DoubleByteSize, -1000000000.0, 8], + # BoolByteSize(). + [wire_format.BoolByteSize, False, 1], + [wire_format.BoolByteSize, True, 1], + # EnumByteSize(). + [wire_format.EnumByteSize, 0, 1], + [wire_format.EnumByteSize, 127, 1], + [wire_format.EnumByteSize, 128, 2], + [wire_format.EnumByteSize, wire_format.UINT32_MAX, 5], + ] + for args in NUMERIC_ARGS: + self.NumericByteSizeTestHelper(*args) + + # Test strings and bytes. + for byte_size_fn in (wire_format.StringByteSize, wire_format.BytesByteSize): + # 1 byte for tag, 1 byte for length, 3 bytes for contents. + self.assertEqual(5, byte_size_fn(10, 'abc')) + # 2 bytes for tag, 1 byte for length, 3 bytes for contents. + self.assertEqual(6, byte_size_fn(16, 'abc')) + # 2 bytes for tag, 2 bytes for length, 128 bytes for contents. + self.assertEqual(132, byte_size_fn(16, 'a' * 128)) + + # Test UTF-8 string byte size calculation. + # 1 byte for tag, 1 byte for length, 8 bytes for content. + self.assertEqual(10, wire_format.StringByteSize( + 5, unicode('\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82', 'utf-8'))) + + class MockMessage(object): + def __init__(self, byte_size): + self.byte_size = byte_size + def ByteSize(self): + return self.byte_size + + message_byte_size = 10 + mock_message = MockMessage(byte_size=message_byte_size) + # Test groups. + # (2 * 1) bytes for begin and end tags, plus message_byte_size. + self.assertEqual(2 + message_byte_size, + wire_format.GroupByteSize(1, mock_message)) + # (2 * 2) bytes for begin and end tags, plus message_byte_size. + self.assertEqual(4 + message_byte_size, + wire_format.GroupByteSize(16, mock_message)) + + # Test messages. + # 1 byte for tag, plus 1 byte for length, plus contents. + self.assertEqual(2 + mock_message.byte_size, + wire_format.MessageByteSize(1, mock_message)) + # 2 bytes for tag, plus 1 byte for length, plus contents. + self.assertEqual(3 + mock_message.byte_size, + wire_format.MessageByteSize(16, mock_message)) + # 2 bytes for tag, plus 2 bytes for length, plus contents. + mock_message.byte_size = 128 + self.assertEqual(4 + mock_message.byte_size, + wire_format.MessageByteSize(16, mock_message)) + + + # Test message set item byte size. + # 4 bytes for tags, plus 1 byte for length, plus 1 byte for type_id, + # plus contents. + mock_message.byte_size = 10 + self.assertEqual(mock_message.byte_size + 6, + wire_format.MessageSetItemByteSize(1, mock_message)) + + # 4 bytes for tags, plus 2 bytes for length, plus 1 byte for type_id, + # plus contents. + mock_message.byte_size = 128 + self.assertEqual(mock_message.byte_size + 7, + wire_format.MessageSetItemByteSize(1, mock_message)) + + # 4 bytes for tags, plus 2 bytes for length, plus 2 byte for type_id, + # plus contents. + self.assertEqual(mock_message.byte_size + 8, + wire_format.MessageSetItemByteSize(128, mock_message)) + + # Too-long varint. + self.assertRaises(message.EncodeError, + wire_format.UInt64ByteSize, 1, 1 << 128) + + +if __name__ == '__main__': + unittest.main() diff --git a/code/push/google/protobuf/message.py b/code/push/google/protobuf/message.py new file mode 100644 index 0000000..6ec2f8b --- /dev/null +++ b/code/push/google/protobuf/message.py @@ -0,0 +1,280 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# TODO(robinson): We should just make these methods all "pure-virtual" and move +# all implementation out, into reflection.py for now. + + +"""Contains an abstract base class for protocol messages.""" + +__author__ = 'robinson@google.com (Will Robinson)' + + +class Error(Exception): pass +class DecodeError(Error): pass +class EncodeError(Error): pass + + +class Message(object): + + """Abstract base class for protocol messages. + + Protocol message classes are almost always generated by the protocol + compiler. These generated types subclass Message and implement the methods + shown below. + + TODO(robinson): Link to an HTML document here. + + TODO(robinson): Document that instances of this class will also + have an Extensions attribute with __getitem__ and __setitem__. + Again, not sure how to best convey this. + + TODO(robinson): Document that the class must also have a static + RegisterExtension(extension_field) method. + Not sure how to best express at this point. + """ + + # TODO(robinson): Document these fields and methods. + + __slots__ = [] + + DESCRIPTOR = None + + def __deepcopy__(self, memo=None): + clone = type(self)() + clone.MergeFrom(self) + return clone + + def __eq__(self, other_msg): + """Recursively compares two messages by value and structure.""" + raise NotImplementedError + + def __ne__(self, other_msg): + # Can't just say self != other_msg, since that would infinitely recurse. :) + return not self == other_msg + + def __hash__(self): + raise TypeError('unhashable object') + + def __str__(self): + """Outputs a human-readable representation of the message.""" + raise NotImplementedError + + def __unicode__(self): + """Outputs a human-readable representation of the message.""" + raise NotImplementedError + + def MergeFrom(self, other_msg): + """Merges the contents of the specified message into current message. + + This method merges the contents of the specified message into the current + message. Singular fields that are set in the specified message overwrite + the corresponding fields in the current message. Repeated fields are + appended. Singular sub-messages and groups are recursively merged. + + Args: + other_msg: Message to merge into the current message. + """ + raise NotImplementedError + + def CopyFrom(self, other_msg): + """Copies the content of the specified message into the current message. + + The method clears the current message and then merges the specified + message using MergeFrom. + + Args: + other_msg: Message to copy into the current one. + """ + if self is other_msg: + return + self.Clear() + self.MergeFrom(other_msg) + + def Clear(self): + """Clears all data that was set in the message.""" + raise NotImplementedError + + def SetInParent(self): + """Mark this as present in the parent. + + This normally happens automatically when you assign a field of a + sub-message, but sometimes you want to make the sub-message + present while keeping it empty. If you find yourself using this, + you may want to reconsider your design.""" + raise NotImplementedError + + def IsInitialized(self): + """Checks if the message is initialized. + + Returns: + The method returns True if the message is initialized (i.e. all of its + required fields are set). + """ + raise NotImplementedError + + # TODO(robinson): MergeFromString() should probably return None and be + # implemented in terms of a helper that returns the # of bytes read. Our + # deserialization routines would use the helper when recursively + # deserializing, but the end user would almost always just want the no-return + # MergeFromString(). + + def MergeFromString(self, serialized): + """Merges serialized protocol buffer data into this message. + + When we find a field in |serialized| that is already present + in this message: + - If it's a "repeated" field, we append to the end of our list. + - Else, if it's a scalar, we overwrite our field. + - Else, (it's a nonrepeated composite), we recursively merge + into the existing composite. + + TODO(robinson): Document handling of unknown fields. + + Args: + serialized: Any object that allows us to call buffer(serialized) + to access a string of bytes using the buffer interface. + + TODO(robinson): When we switch to a helper, this will return None. + + Returns: + The number of bytes read from |serialized|. + For non-group messages, this will always be len(serialized), + but for messages which are actually groups, this will + generally be less than len(serialized), since we must + stop when we reach an END_GROUP tag. Note that if + we *do* stop because of an END_GROUP tag, the number + of bytes returned does not include the bytes + for the END_GROUP tag information. + """ + raise NotImplementedError + + def ParseFromString(self, serialized): + """Like MergeFromString(), except we clear the object first.""" + self.Clear() + self.MergeFromString(serialized) + + def SerializeToString(self): + """Serializes the protocol message to a binary string. + + Returns: + A binary string representation of the message if all of the required + fields in the message are set (i.e. the message is initialized). + + Raises: + message.EncodeError if the message isn't initialized. + """ + raise NotImplementedError + + def SerializePartialToString(self): + """Serializes the protocol message to a binary string. + + This method is similar to SerializeToString but doesn't check if the + message is initialized. + + Returns: + A string representation of the partial message. + """ + raise NotImplementedError + + # TODO(robinson): Decide whether we like these better + # than auto-generated has_foo() and clear_foo() methods + # on the instances themselves. This way is less consistent + # with C++, but it makes reflection-type access easier and + # reduces the number of magically autogenerated things. + # + # TODO(robinson): Be sure to document (and test) exactly + # which field names are accepted here. Are we case-sensitive? + # What do we do with fields that share names with Python keywords + # like 'lambda' and 'yield'? + # + # nnorwitz says: + # """ + # Typically (in python), an underscore is appended to names that are + # keywords. So they would become lambda_ or yield_. + # """ + def ListFields(self): + """Returns a list of (FieldDescriptor, value) tuples for all + fields in the message which are not empty. A singular field is non-empty + if HasField() would return true, and a repeated field is non-empty if + it contains at least one element. The fields are ordered by field + number""" + raise NotImplementedError + + def HasField(self, field_name): + """Checks if a certain field is set for the message. Note if the + field_name is not defined in the message descriptor, ValueError will be + raised.""" + raise NotImplementedError + + def ClearField(self, field_name): + raise NotImplementedError + + def HasExtension(self, extension_handle): + raise NotImplementedError + + def ClearExtension(self, extension_handle): + raise NotImplementedError + + def ByteSize(self): + """Returns the serialized size of this message. + Recursively calls ByteSize() on all contained messages. + """ + raise NotImplementedError + + def _SetListener(self, message_listener): + """Internal method used by the protocol message implementation. + Clients should not call this directly. + + Sets a listener that this message will call on certain state transitions. + + The purpose of this method is to register back-edges from children to + parents at runtime, for the purpose of setting "has" bits and + byte-size-dirty bits in the parent and ancestor objects whenever a child or + descendant object is modified. + + If the client wants to disconnect this Message from the object tree, she + explicitly sets callback to None. + + If message_listener is None, unregisters any existing listener. Otherwise, + message_listener must implement the MessageListener interface in + internal/message_listener.py, and we discard any listener registered + via a previous _SetListener() call. + """ + raise NotImplementedError + + def __getstate__(self): + """Support the pickle protocol.""" + return dict(serialized=self.SerializePartialToString()) + + def __setstate__(self, state): + """Support the pickle protocol.""" + self.__init__() + self.ParseFromString(state['serialized']) diff --git a/code/push/google/protobuf/message_factory.py b/code/push/google/protobuf/message_factory.py new file mode 100644 index 0000000..36e2fef --- /dev/null +++ b/code/push/google/protobuf/message_factory.py @@ -0,0 +1,113 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Provides a factory class for generating dynamic messages.""" + +__author__ = 'matthewtoia@google.com (Matt Toia)' + +from google.protobuf import descriptor_database +from google.protobuf import descriptor_pool +from google.protobuf import message +from google.protobuf import reflection + + +class MessageFactory(object): + """Factory for creating Proto2 messages from descriptors in a pool.""" + + def __init__(self): + """Initializes a new factory.""" + self._classes = {} + + def GetPrototype(self, descriptor): + """Builds a proto2 message class based on the passed in descriptor. + + Passing a descriptor with a fully qualified name matching a previous + invocation will cause the same class to be returned. + + Args: + descriptor: The descriptor to build from. + + Returns: + A class describing the passed in descriptor. + """ + + if descriptor.full_name not in self._classes: + result_class = reflection.GeneratedProtocolMessageType( + descriptor.name.encode('ascii', 'ignore'), + (message.Message,), + {'DESCRIPTOR': descriptor}) + self._classes[descriptor.full_name] = result_class + for field in descriptor.fields: + if field.message_type: + self.GetPrototype(field.message_type) + return self._classes[descriptor.full_name] + + +_DB = descriptor_database.DescriptorDatabase() +_POOL = descriptor_pool.DescriptorPool(_DB) +_FACTORY = MessageFactory() + + +def GetMessages(file_protos): + """Builds a dictionary of all the messages available in a set of files. + + Args: + file_protos: A sequence of file protos to build messages out of. + + Returns: + A dictionary containing all the message types in the files mapping the + fully qualified name to a Message subclass for the descriptor. + """ + + result = {} + for file_proto in file_protos: + _DB.Add(file_proto) + for file_proto in file_protos: + for desc in _GetAllDescriptors(file_proto.message_type, file_proto.package): + result[desc.full_name] = _FACTORY.GetPrototype(desc) + return result + + +def _GetAllDescriptors(desc_protos, package): + """Gets all levels of nested message types as a flattened list of descriptors. + + Args: + desc_protos: The descriptor protos to process. + package: The package where the protos are defined. + + Yields: + Each message descriptor for each nested type. + """ + + for desc_proto in desc_protos: + name = '.'.join((package, desc_proto.name)) + yield _POOL.FindMessageTypeByName(name) + for nested_desc in _GetAllDescriptors(desc_proto.nested_type, name): + yield nested_desc diff --git a/code/push/google/protobuf/pyext/python-proto2.cc b/code/push/google/protobuf/pyext/python-proto2.cc new file mode 100644 index 0000000..eebb752 --- /dev/null +++ b/code/push/google/protobuf/pyext/python-proto2.cc @@ -0,0 +1,1717 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: petar@google.com (Petar Petrov) + +#include +#include +#include +#include + +#include +#include +#include +#include +#include +#include +#include +#include + +/* Is 64bit */ +#define IS_64BIT (SIZEOF_LONG == 8) + +#define FIELD_BELONGS_TO_MESSAGE(field_descriptor, message) \ + ((message)->GetDescriptor() == (field_descriptor)->containing_type()) + +#define FIELD_IS_REPEATED(field_descriptor) \ + ((field_descriptor)->label() == google::protobuf::FieldDescriptor::LABEL_REPEATED) + +#define GOOGLE_CHECK_GET_INT32(arg, value) \ + int32 value; \ + if (!CheckAndGetInteger(arg, &value, kint32min_py, kint32max_py)) { \ + return NULL; \ + } + +#define GOOGLE_CHECK_GET_INT64(arg, value) \ + int64 value; \ + if (!CheckAndGetInteger(arg, &value, kint64min_py, kint64max_py)) { \ + return NULL; \ + } + +#define GOOGLE_CHECK_GET_UINT32(arg, value) \ + uint32 value; \ + if (!CheckAndGetInteger(arg, &value, kPythonZero, kuint32max_py)) { \ + return NULL; \ + } + +#define GOOGLE_CHECK_GET_UINT64(arg, value) \ + uint64 value; \ + if (!CheckAndGetInteger(arg, &value, kPythonZero, kuint64max_py)) { \ + return NULL; \ + } + +#define GOOGLE_CHECK_GET_FLOAT(arg, value) \ + float value; \ + if (!CheckAndGetFloat(arg, &value)) { \ + return NULL; \ + } \ + +#define GOOGLE_CHECK_GET_DOUBLE(arg, value) \ + double value; \ + if (!CheckAndGetDouble(arg, &value)) { \ + return NULL; \ + } + +#define GOOGLE_CHECK_GET_BOOL(arg, value) \ + bool value; \ + if (!CheckAndGetBool(arg, &value)) { \ + return NULL; \ + } + +#define C(str) const_cast(str) + +// --- Globals: + +// Constants used for integer type range checking. +static PyObject* kPythonZero; +static PyObject* kint32min_py; +static PyObject* kint32max_py; +static PyObject* kuint32max_py; +static PyObject* kint64min_py; +static PyObject* kint64max_py; +static PyObject* kuint64max_py; + +namespace google { +namespace protobuf { +namespace python { + +// --- Support Routines: + +static void AddConstants(PyObject* module) { + struct NameValue { + char* name; + int32 value; + } constants[] = { + // Labels: + {"LABEL_OPTIONAL", google::protobuf::FieldDescriptor::LABEL_OPTIONAL}, + {"LABEL_REQUIRED", google::protobuf::FieldDescriptor::LABEL_REQUIRED}, + {"LABEL_REPEATED", google::protobuf::FieldDescriptor::LABEL_REPEATED}, + // CPP types: + {"CPPTYPE_MESSAGE", google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE}, + // Field Types: + {"TYPE_MESSAGE", google::protobuf::FieldDescriptor::TYPE_MESSAGE}, + // End. + {NULL, 0} + }; + + for (NameValue* constant = constants; + constant->name != NULL; constant++) { + PyModule_AddIntConstant(module, constant->name, constant->value); + } +} + +// --- CMessage Custom Type: + +// ------ Type Forward Declaration: + +struct CMessage; +struct CMessage_Type; + +static void CMessageDealloc(CMessage* self); +static int CMessageInit(CMessage* self, PyObject *args, PyObject *kwds); +static PyObject* CMessageStr(CMessage* self); + +static PyObject* CMessage_AddMessage(CMessage* self, PyObject* args); +static PyObject* CMessage_AddRepeatedScalar(CMessage* self, PyObject* args); +static PyObject* CMessage_AssignRepeatedScalar(CMessage* self, PyObject* args); +static PyObject* CMessage_ByteSize(CMessage* self, PyObject* args); +static PyObject* CMessage_Clear(CMessage* self, PyObject* args); +static PyObject* CMessage_ClearField(CMessage* self, PyObject* args); +static PyObject* CMessage_ClearFieldByDescriptor( + CMessage* self, PyObject* args); +static PyObject* CMessage_CopyFrom(CMessage* self, PyObject* args); +static PyObject* CMessage_DebugString(CMessage* self, PyObject* args); +static PyObject* CMessage_DeleteRepeatedField(CMessage* self, PyObject* args); +static PyObject* CMessage_Equals(CMessage* self, PyObject* args); +static PyObject* CMessage_FieldLength(CMessage* self, PyObject* args); +static PyObject* CMessage_FindInitializationErrors(CMessage* self); +static PyObject* CMessage_GetRepeatedMessage(CMessage* self, PyObject* args); +static PyObject* CMessage_GetRepeatedScalar(CMessage* self, PyObject* args); +static PyObject* CMessage_GetScalar(CMessage* self, PyObject* args); +static PyObject* CMessage_HasField(CMessage* self, PyObject* args); +static PyObject* CMessage_HasFieldByDescriptor(CMessage* self, PyObject* args); +static PyObject* CMessage_IsInitialized(CMessage* self, PyObject* args); +static PyObject* CMessage_ListFields(CMessage* self, PyObject* args); +static PyObject* CMessage_MergeFrom(CMessage* self, PyObject* args); +static PyObject* CMessage_MergeFromString(CMessage* self, PyObject* args); +static PyObject* CMessage_MutableMessage(CMessage* self, PyObject* args); +static PyObject* CMessage_NewSubMessage(CMessage* self, PyObject* args); +static PyObject* CMessage_SetScalar(CMessage* self, PyObject* args); +static PyObject* CMessage_SerializePartialToString( + CMessage* self, PyObject* args); +static PyObject* CMessage_SerializeToString(CMessage* self, PyObject* args); +static PyObject* CMessage_SetInParent(CMessage* self, PyObject* args); +static PyObject* CMessage_SwapRepeatedFieldElements( + CMessage* self, PyObject* args); + +// ------ Object Definition: + +typedef struct CMessage { + PyObject_HEAD + + struct CMessage* parent; // NULL if wasn't created from another message. + CFieldDescriptor* parent_field; + const char* full_name; + google::protobuf::Message* message; + bool free_message; + bool read_only; +} CMessage; + +// ------ Method Table: + +#define CMETHOD(name, args, doc) \ + { C(#name), (PyCFunction)CMessage_##name, args, C(doc) } +static PyMethodDef CMessageMethods[] = { + CMETHOD(AddMessage, METH_O, + "Adds a new message to a repeated composite field."), + CMETHOD(AddRepeatedScalar, METH_VARARGS, + "Adds a scalar to a repeated scalar field."), + CMETHOD(AssignRepeatedScalar, METH_VARARGS, + "Clears and sets the values of a repeated scalar field."), + CMETHOD(ByteSize, METH_NOARGS, + "Returns the size of the message in bytes."), + CMETHOD(Clear, METH_O, + "Clears a protocol message."), + CMETHOD(ClearField, METH_VARARGS, + "Clears a protocol message field by name."), + CMETHOD(ClearFieldByDescriptor, METH_O, + "Clears a protocol message field by descriptor."), + CMETHOD(CopyFrom, METH_O, + "Copies a protocol message into the current message."), + CMETHOD(DebugString, METH_NOARGS, + "Returns the debug string of a protocol message."), + CMETHOD(DeleteRepeatedField, METH_VARARGS, + "Deletes a slice of values from a repeated field."), + CMETHOD(Equals, METH_O, + "Checks if two protocol messages are equal (by identity)."), + CMETHOD(FieldLength, METH_O, + "Returns the number of elements in a repeated field."), + CMETHOD(FindInitializationErrors, METH_NOARGS, + "Returns the initialization errors of a message."), + CMETHOD(GetRepeatedMessage, METH_VARARGS, + "Returns a message from a repeated composite field."), + CMETHOD(GetRepeatedScalar, METH_VARARGS, + "Returns a scalar value from a repeated scalar field."), + CMETHOD(GetScalar, METH_O, + "Returns the scalar value of a field."), + CMETHOD(HasField, METH_O, + "Checks if a message field is set."), + CMETHOD(HasFieldByDescriptor, METH_O, + "Checks if a message field is set by given its descriptor"), + CMETHOD(IsInitialized, METH_NOARGS, + "Checks if all required fields of a protocol message are set."), + CMETHOD(ListFields, METH_NOARGS, + "Lists all set fields of a message."), + CMETHOD(MergeFrom, METH_O, + "Merges a protocol message into the current message."), + CMETHOD(MergeFromString, METH_O, + "Merges a serialized message into the current message."), + CMETHOD(MutableMessage, METH_O, + "Returns a new instance of a nested protocol message."), + CMETHOD(NewSubMessage, METH_O, + "Creates and returns a python message given the descriptor of a " + "composite field of the current message."), + CMETHOD(SetScalar, METH_VARARGS, + "Sets the value of a singular scalar field."), + CMETHOD(SerializePartialToString, METH_VARARGS, + "Serializes the message to a string, even if it isn't initialized."), + CMETHOD(SerializeToString, METH_NOARGS, + "Serializes the message to a string, only for initialized messages."), + CMETHOD(SetInParent, METH_NOARGS, + "Sets the has bit of the given field in its parent message."), + CMETHOD(SwapRepeatedFieldElements, METH_VARARGS, + "Swaps the elements in two positions in a repeated field."), + { NULL, NULL } +}; +#undef CMETHOD + +static PyMemberDef CMessageMembers[] = { + { C("full_name"), T_STRING, offsetof(CMessage, full_name), 0, "Full name" }, + { NULL } +}; + +// ------ Type Definition: + +// The definition for the type object that captures the type of CMessage +// in Python. +PyTypeObject CMessage_Type = { + PyObject_HEAD_INIT(&PyType_Type) + 0, + C("google.protobuf.internal." + "_net_proto2___python." + "CMessage"), // tp_name + sizeof(CMessage), // tp_basicsize + 0, // tp_itemsize + (destructor)CMessageDealloc, // tp_dealloc + 0, // tp_print + 0, // tp_getattr + 0, // tp_setattr + 0, // tp_compare + 0, // tp_repr + 0, // tp_as_number + 0, // tp_as_sequence + 0, // tp_as_mapping + 0, // tp_hash + 0, // tp_call + (reprfunc)CMessageStr, // tp_str + 0, // tp_getattro + 0, // tp_setattro + 0, // tp_as_buffer + Py_TPFLAGS_DEFAULT, // tp_flags + C("A ProtocolMessage"), // tp_doc + 0, // tp_traverse + 0, // tp_clear + 0, // tp_richcompare + 0, // tp_weaklistoffset + 0, // tp_iter + 0, // tp_iternext + CMessageMethods, // tp_methods + CMessageMembers, // tp_members + 0, // tp_getset + 0, // tp_base + 0, // tp_dict + 0, // tp_descr_get + 0, // tp_descr_set + 0, // tp_dictoffset + (initproc)CMessageInit, // tp_init + PyType_GenericAlloc, // tp_alloc + PyType_GenericNew, // tp_new + PyObject_Del, // tp_free +}; + +// ------ Helper Functions: + +static void FormatTypeError(PyObject* arg, char* expected_types) { + PyObject* repr = PyObject_Repr(arg); + PyErr_Format(PyExc_TypeError, + "%.100s has type %.100s, but expected one of: %s", + PyString_AS_STRING(repr), + arg->ob_type->tp_name, + expected_types); + Py_DECREF(repr); +} + +template +static bool CheckAndGetInteger( + PyObject* arg, T* value, PyObject* min, PyObject* max) { + bool is_long = PyLong_Check(arg); + if (!PyInt_Check(arg) && !is_long) { + FormatTypeError(arg, "int, long"); + return false; + } + + if (PyObject_Compare(min, arg) > 0 || PyObject_Compare(max, arg) < 0) { + PyObject* s = PyObject_Str(arg); + PyErr_Format(PyExc_ValueError, + "Value out of range: %s", + PyString_AS_STRING(s)); + Py_DECREF(s); + return false; + } + if (is_long) { + if (min == kPythonZero) { + *value = static_cast(PyLong_AsUnsignedLongLong(arg)); + } else { + *value = static_cast(PyLong_AsLongLong(arg)); + } + } else { + *value = static_cast(PyInt_AsLong(arg)); + } + return true; +} + +static bool CheckAndGetDouble(PyObject* arg, double* value) { + if (!PyInt_Check(arg) && !PyLong_Check(arg) && + !PyFloat_Check(arg)) { + FormatTypeError(arg, "int, long, float"); + return false; + } + *value = PyFloat_AsDouble(arg); + return true; +} + +static bool CheckAndGetFloat(PyObject* arg, float* value) { + double double_value; + if (!CheckAndGetDouble(arg, &double_value)) { + return false; + } + *value = static_cast(double_value); + return true; +} + +static bool CheckAndGetBool(PyObject* arg, bool* value) { + if (!PyInt_Check(arg) && !PyBool_Check(arg) && !PyLong_Check(arg)) { + FormatTypeError(arg, "int, long, bool"); + return false; + } + *value = static_cast(PyInt_AsLong(arg)); + return true; +} + +google::protobuf::DynamicMessageFactory* global_message_factory = NULL; +static const google::protobuf::Message* CreateMessage(const char* message_type) { + string message_name(message_type); + const google::protobuf::Descriptor* descriptor = + GetDescriptorPool()->FindMessageTypeByName(message_name); + if (descriptor == NULL) { + return NULL; + } + return global_message_factory->GetPrototype(descriptor); +} + +static void ReleaseSubMessage(google::protobuf::Message* message, + const google::protobuf::FieldDescriptor* field_descriptor, + CMessage* child_cmessage) { + Message* released_message = message->GetReflection()->ReleaseMessage( + message, field_descriptor, global_message_factory); + GOOGLE_DCHECK(child_cmessage->message != NULL); + // ReleaseMessage will return NULL which differs from + // child_cmessage->message, if the field does not exist. In this case, + // the latter points to the default instance via a const_cast<>, so we + // have to reset it to a new mutable object since we are taking ownership. + if (released_message == NULL) { + const Message* prototype = global_message_factory->GetPrototype( + child_cmessage->message->GetDescriptor()); + GOOGLE_DCHECK(prototype != NULL); + child_cmessage->message = prototype->New(); + } + child_cmessage->parent = NULL; + child_cmessage->parent_field = NULL; + child_cmessage->free_message = true; + child_cmessage->read_only = false; +} + +static bool CheckAndSetString( + PyObject* arg, google::protobuf::Message* message, + const google::protobuf::FieldDescriptor* descriptor, + const google::protobuf::Reflection* reflection, + bool append, + int index) { + GOOGLE_DCHECK(descriptor->type() == google::protobuf::FieldDescriptor::TYPE_STRING || + descriptor->type() == google::protobuf::FieldDescriptor::TYPE_BYTES); + if (descriptor->type() == google::protobuf::FieldDescriptor::TYPE_STRING) { + if (!PyString_Check(arg) && !PyUnicode_Check(arg)) { + FormatTypeError(arg, "str, unicode"); + return false; + } + + if (PyString_Check(arg)) { + PyObject* unicode = PyUnicode_FromEncodedObject(arg, "ascii", NULL); + if (unicode == NULL) { + PyObject* repr = PyObject_Repr(arg); + PyErr_Format(PyExc_ValueError, + "%s has type str, but isn't in 7-bit ASCII " + "encoding. Non-ASCII strings must be converted to " + "unicode objects before being added.", + PyString_AS_STRING(repr)); + Py_DECREF(repr); + return false; + } else { + Py_DECREF(unicode); + } + } + } else if (!PyString_Check(arg)) { + FormatTypeError(arg, "str"); + return false; + } + + PyObject* encoded_string = NULL; + if (descriptor->type() == google::protobuf::FieldDescriptor::TYPE_STRING) { + if (PyString_Check(arg)) { + encoded_string = PyString_AsEncodedObject(arg, "utf-8", NULL); + } else { + encoded_string = PyUnicode_AsEncodedObject(arg, "utf-8", NULL); + } + } else { + // In this case field type is "bytes". + encoded_string = arg; + Py_INCREF(encoded_string); + } + + if (encoded_string == NULL) { + return false; + } + + char* value; + Py_ssize_t value_len; + if (PyString_AsStringAndSize(encoded_string, &value, &value_len) < 0) { + Py_DECREF(encoded_string); + return false; + } + + string value_string(value, value_len); + if (append) { + reflection->AddString(message, descriptor, value_string); + } else if (index < 0) { + reflection->SetString(message, descriptor, value_string); + } else { + reflection->SetRepeatedString(message, descriptor, index, value_string); + } + Py_DECREF(encoded_string); + return true; +} + +static PyObject* ToStringObject( + const google::protobuf::FieldDescriptor* descriptor, string value) { + if (descriptor->type() != google::protobuf::FieldDescriptor::TYPE_STRING) { + return PyString_FromStringAndSize(value.c_str(), value.length()); + } + + PyObject* result = PyUnicode_DecodeUTF8(value.c_str(), value.length(), NULL); + // If the string can't be decoded in UTF-8, just return a string object that + // contains the raw bytes. This can't happen if the value was assigned using + // the members of the Python message object, but can happen if the values were + // parsed from the wire (binary). + if (result == NULL) { + PyErr_Clear(); + result = PyString_FromStringAndSize(value.c_str(), value.length()); + } + return result; +} + +static void AssureWritable(CMessage* self) { + if (self == NULL || + self->parent == NULL || + self->parent_field == NULL) { + return; + } + + if (!self->read_only) { + return; + } + + AssureWritable(self->parent); + + google::protobuf::Message* message = self->parent->message; + const google::protobuf::Reflection* reflection = message->GetReflection(); + self->message = reflection->MutableMessage( + message, self->parent_field->descriptor, global_message_factory); + self->read_only = false; +} + +static PyObject* InternalGetScalar( + google::protobuf::Message* message, + const google::protobuf::FieldDescriptor* field_descriptor) { + const google::protobuf::Reflection* reflection = message->GetReflection(); + + if (!FIELD_BELONGS_TO_MESSAGE(field_descriptor, message)) { + PyErr_SetString( + PyExc_KeyError, "Field does not belong to message!"); + return NULL; + } + + PyObject* result = NULL; + switch (field_descriptor->cpp_type()) { + case google::protobuf::FieldDescriptor::CPPTYPE_INT32: { + int32 value = reflection->GetInt32(*message, field_descriptor); + result = PyInt_FromLong(value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_INT64: { + int64 value = reflection->GetInt64(*message, field_descriptor); +#if IS_64BIT + result = PyInt_FromLong(value); +#else + result = PyLong_FromLongLong(value); +#endif + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: { + uint32 value = reflection->GetUInt32(*message, field_descriptor); +#if IS_64BIT + result = PyInt_FromLong(value); +#else + result = PyLong_FromLongLong(value); +#endif + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: { + uint64 value = reflection->GetUInt64(*message, field_descriptor); +#if IS_64BIT + if (value <= static_cast(kint64max)) { + result = PyInt_FromLong(static_cast(value)); + } +#else + if (value <= static_cast(kint32max)) { + result = PyInt_FromLong(static_cast(value)); + } +#endif + else { // NOLINT + result = PyLong_FromUnsignedLongLong(value); + } + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: { + float value = reflection->GetFloat(*message, field_descriptor); + result = PyFloat_FromDouble(value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: { + double value = reflection->GetDouble(*message, field_descriptor); + result = PyFloat_FromDouble(value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_BOOL: { + bool value = reflection->GetBool(*message, field_descriptor); + result = PyBool_FromLong(value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_STRING: { + string value = reflection->GetString(*message, field_descriptor); + result = ToStringObject(field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_ENUM: { + if (!message->GetReflection()->HasField(*message, field_descriptor)) { + // Look for the value in the unknown fields. + google::protobuf::UnknownFieldSet* unknown_field_set = + message->GetReflection()->MutableUnknownFields(message); + for (int i = 0; i < unknown_field_set->field_count(); ++i) { + if (unknown_field_set->field(i).number() == + field_descriptor->number()) { + result = PyInt_FromLong(unknown_field_set->field(i).varint()); + break; + } + } + } + + if (result == NULL) { + const google::protobuf::EnumValueDescriptor* enum_value = + message->GetReflection()->GetEnum(*message, field_descriptor); + result = PyInt_FromLong(enum_value->number()); + } + break; + } + default: + PyErr_Format( + PyExc_SystemError, "Getting a value from a field of unknown type %d", + field_descriptor->cpp_type()); + } + + return result; +} + +static PyObject* InternalSetScalar( + google::protobuf::Message* message, const google::protobuf::FieldDescriptor* field_descriptor, + PyObject* arg) { + const google::protobuf::Reflection* reflection = message->GetReflection(); + + if (!FIELD_BELONGS_TO_MESSAGE(field_descriptor, message)) { + PyErr_SetString( + PyExc_KeyError, "Field does not belong to message!"); + return NULL; + } + + switch (field_descriptor->cpp_type()) { + case google::protobuf::FieldDescriptor::CPPTYPE_INT32: { + GOOGLE_CHECK_GET_INT32(arg, value); + reflection->SetInt32(message, field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_INT64: { + GOOGLE_CHECK_GET_INT64(arg, value); + reflection->SetInt64(message, field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: { + GOOGLE_CHECK_GET_UINT32(arg, value); + reflection->SetUInt32(message, field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: { + GOOGLE_CHECK_GET_UINT64(arg, value); + reflection->SetUInt64(message, field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: { + GOOGLE_CHECK_GET_FLOAT(arg, value); + reflection->SetFloat(message, field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: { + GOOGLE_CHECK_GET_DOUBLE(arg, value); + reflection->SetDouble(message, field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_BOOL: { + GOOGLE_CHECK_GET_BOOL(arg, value); + reflection->SetBool(message, field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_STRING: { + if (!CheckAndSetString( + arg, message, field_descriptor, reflection, false, -1)) { + return NULL; + } + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_ENUM: { + GOOGLE_CHECK_GET_INT32(arg, value); + const google::protobuf::EnumDescriptor* enum_descriptor = + field_descriptor->enum_type(); + const google::protobuf::EnumValueDescriptor* enum_value = + enum_descriptor->FindValueByNumber(value); + if (enum_value != NULL) { + reflection->SetEnum(message, field_descriptor, enum_value); + } else { + bool added = false; + // Add the value to the unknown fields. + google::protobuf::UnknownFieldSet* unknown_field_set = + message->GetReflection()->MutableUnknownFields(message); + for (int i = 0; i < unknown_field_set->field_count(); ++i) { + if (unknown_field_set->field(i).number() == + field_descriptor->number()) { + unknown_field_set->mutable_field(i)->set_varint(value); + added = true; + break; + } + } + + if (!added) { + unknown_field_set->AddVarint(field_descriptor->number(), value); + } + reflection->ClearField(message, field_descriptor); + } + break; + } + default: + PyErr_Format( + PyExc_SystemError, "Setting value to a field of unknown type %d", + field_descriptor->cpp_type()); + } + + Py_RETURN_NONE; +} + +static PyObject* InternalAddRepeatedScalar( + google::protobuf::Message* message, const google::protobuf::FieldDescriptor* field_descriptor, + PyObject* arg) { + + if (!FIELD_BELONGS_TO_MESSAGE(field_descriptor, message)) { + PyErr_SetString( + PyExc_KeyError, "Field does not belong to message!"); + return NULL; + } + + const google::protobuf::Reflection* reflection = message->GetReflection(); + switch (field_descriptor->cpp_type()) { + case google::protobuf::FieldDescriptor::CPPTYPE_INT32: { + GOOGLE_CHECK_GET_INT32(arg, value); + reflection->AddInt32(message, field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_INT64: { + GOOGLE_CHECK_GET_INT64(arg, value); + reflection->AddInt64(message, field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: { + GOOGLE_CHECK_GET_UINT32(arg, value); + reflection->AddUInt32(message, field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: { + GOOGLE_CHECK_GET_UINT64(arg, value); + reflection->AddUInt64(message, field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: { + GOOGLE_CHECK_GET_FLOAT(arg, value); + reflection->AddFloat(message, field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: { + GOOGLE_CHECK_GET_DOUBLE(arg, value); + reflection->AddDouble(message, field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_BOOL: { + GOOGLE_CHECK_GET_BOOL(arg, value); + reflection->AddBool(message, field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_STRING: { + if (!CheckAndSetString( + arg, message, field_descriptor, reflection, true, -1)) { + return NULL; + } + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_ENUM: { + GOOGLE_CHECK_GET_INT32(arg, value); + const google::protobuf::EnumDescriptor* enum_descriptor = + field_descriptor->enum_type(); + const google::protobuf::EnumValueDescriptor* enum_value = + enum_descriptor->FindValueByNumber(value); + if (enum_value != NULL) { + reflection->AddEnum(message, field_descriptor, enum_value); + } else { + PyObject* s = PyObject_Str(arg); + PyErr_Format(PyExc_ValueError, "Unknown enum value: %s", + PyString_AS_STRING(s)); + Py_DECREF(s); + return NULL; + } + break; + } + default: + PyErr_Format( + PyExc_SystemError, "Adding value to a field of unknown type %d", + field_descriptor->cpp_type()); + } + + Py_RETURN_NONE; +} + +static PyObject* InternalGetRepeatedScalar( + CMessage* cmessage, const google::protobuf::FieldDescriptor* field_descriptor, + int index) { + google::protobuf::Message* message = cmessage->message; + const google::protobuf::Reflection* reflection = message->GetReflection(); + + int field_size = reflection->FieldSize(*message, field_descriptor); + if (index < 0) { + index = field_size + index; + } + if (index < 0 || index >= field_size) { + PyErr_Format(PyExc_IndexError, + "list assignment index (%d) out of range", index); + return NULL; + } + + PyObject* result = NULL; + switch (field_descriptor->cpp_type()) { + case google::protobuf::FieldDescriptor::CPPTYPE_INT32: { + int32 value = reflection->GetRepeatedInt32( + *message, field_descriptor, index); + result = PyInt_FromLong(value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_INT64: { + int64 value = reflection->GetRepeatedInt64( + *message, field_descriptor, index); + result = PyLong_FromLongLong(value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_UINT32: { + uint32 value = reflection->GetRepeatedUInt32( + *message, field_descriptor, index); + result = PyLong_FromLongLong(value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_UINT64: { + uint64 value = reflection->GetRepeatedUInt64( + *message, field_descriptor, index); + result = PyLong_FromUnsignedLongLong(value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_FLOAT: { + float value = reflection->GetRepeatedFloat( + *message, field_descriptor, index); + result = PyFloat_FromDouble(value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_DOUBLE: { + double value = reflection->GetRepeatedDouble( + *message, field_descriptor, index); + result = PyFloat_FromDouble(value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_BOOL: { + bool value = reflection->GetRepeatedBool( + *message, field_descriptor, index); + result = PyBool_FromLong(value ? 1 : 0); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_ENUM: { + const google::protobuf::EnumValueDescriptor* enum_value = + message->GetReflection()->GetRepeatedEnum( + *message, field_descriptor, index); + result = PyInt_FromLong(enum_value->number()); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_STRING: { + string value = reflection->GetRepeatedString( + *message, field_descriptor, index); + result = ToStringObject(field_descriptor, value); + break; + } + case google::protobuf::FieldDescriptor::CPPTYPE_MESSAGE: { + CMessage* py_cmsg = PyObject_New(CMessage, &CMessage_Type); + if (py_cmsg == NULL) { + return NULL; + } + const google::protobuf::Message& msg = reflection->GetRepeatedMessage( + *message, field_descriptor, index); + py_cmsg->parent = cmessage; + py_cmsg->full_name = field_descriptor->full_name().c_str(); + py_cmsg->message = const_cast(&msg); + py_cmsg->free_message = false; + py_cmsg->read_only = false; + result = reinterpret_cast(py_cmsg); + break; + } + default: + PyErr_Format( + PyExc_SystemError, + "Getting value from a repeated field of unknown type %d", + field_descriptor->cpp_type()); + } + + return result; +} + +static PyObject* InternalGetRepeatedScalarSlice( + CMessage* cmessage, const google::protobuf::FieldDescriptor* field_descriptor, + PyObject* slice) { + Py_ssize_t from; + Py_ssize_t to; + Py_ssize_t step; + Py_ssize_t length; + bool return_list = false; + google::protobuf::Message* message = cmessage->message; + + if (PyInt_Check(slice)) { + from = to = PyInt_AsLong(slice); + } else if (PyLong_Check(slice)) { + from = to = PyLong_AsLong(slice); + } else if (PySlice_Check(slice)) { + const google::protobuf::Reflection* reflection = message->GetReflection(); + length = reflection->FieldSize(*message, field_descriptor); + PySlice_GetIndices( + reinterpret_cast(slice), length, &from, &to, &step); + return_list = true; + } else { + PyErr_SetString(PyExc_TypeError, "list indices must be integers"); + return NULL; + } + + if (!return_list) { + return InternalGetRepeatedScalar(cmessage, field_descriptor, from); + } + + PyObject* list = PyList_New(0); + if (list == NULL) { + return NULL; + } + + if (from <= to) { + if (step < 0) return list; + for (Py_ssize_t index = from; index < to; index += step) { + if (index < 0 || index >= length) break; + PyObject* s = InternalGetRepeatedScalar( + cmessage, field_descriptor, index); + PyList_Append(list, s); + Py_DECREF(s); + } + } else { + if (step > 0) return list; + for (Py_ssize_t index = from; index > to; index += step) { + if (index < 0 || index >= length) break; + PyObject* s = InternalGetRepeatedScalar( + cmessage, field_descriptor, index); + PyList_Append(list, s); + Py_DECREF(s); + } + } + return list; +} + +// ------ C Constructor/Destructor: + +static int CMessageInit(CMessage* self, PyObject *args, PyObject *kwds) { + self->message = NULL; + return 0; +} + +static void CMessageDealloc(CMessage* self) { + if (self->free_message) { + if (self->read_only) { + PyErr_WriteUnraisable(reinterpret_cast(self)); + } + delete self->message; + } + self->ob_type->tp_free(reinterpret_cast(self)); +} + +// ------ Methods: + +static PyObject* CMessage_Clear(CMessage* self, PyObject* arg) { + AssureWritable(self); + google::protobuf::Message* message = self->message; + + // This block of code is equivalent to the following: + // for cfield_descriptor, child_cmessage in arg: + // ReleaseSubMessage(cfield_descriptor, child_cmessage) + if (!PyList_Check(arg)) { + PyErr_SetString(PyExc_TypeError, "Must be a list"); + return NULL; + } + PyObject* messages_to_clear = arg; + Py_ssize_t num_messages_to_clear = PyList_GET_SIZE(messages_to_clear); + for(int i = 0; i < num_messages_to_clear; ++i) { + PyObject* message_tuple = PyList_GET_ITEM(messages_to_clear, i); + if (!PyTuple_Check(message_tuple) || PyTuple_GET_SIZE(message_tuple) != 2) { + PyErr_SetString(PyExc_TypeError, "Must be a tuple of size 2"); + return NULL; + } + + PyObject* py_cfield_descriptor = PyTuple_GET_ITEM(message_tuple, 0); + PyObject* py_child_cmessage = PyTuple_GET_ITEM(message_tuple, 1); + if (!PyObject_TypeCheck(py_cfield_descriptor, &CFieldDescriptor_Type) || + !PyObject_TypeCheck(py_child_cmessage, &CMessage_Type)) { + PyErr_SetString(PyExc_ValueError, "Invalid Tuple"); + return NULL; + } + + CFieldDescriptor* cfield_descriptor = reinterpret_cast( + py_cfield_descriptor); + CMessage* child_cmessage = reinterpret_cast(py_child_cmessage); + ReleaseSubMessage(message, cfield_descriptor->descriptor, child_cmessage); + } + + message->Clear(); + Py_RETURN_NONE; +} + +static PyObject* CMessage_IsInitialized(CMessage* self, PyObject* args) { + return PyBool_FromLong(self->message->IsInitialized() ? 1 : 0); +} + +static PyObject* CMessage_HasField(CMessage* self, PyObject* arg) { + char* field_name; + if (PyString_AsStringAndSize(arg, &field_name, NULL) < 0) { + return NULL; + } + + google::protobuf::Message* message = self->message; + const google::protobuf::Descriptor* descriptor = message->GetDescriptor(); + const google::protobuf::FieldDescriptor* field_descriptor = + descriptor->FindFieldByName(field_name); + if (field_descriptor == NULL) { + PyErr_Format(PyExc_ValueError, "Unknown field %s.", field_name); + return NULL; + } + + bool has_field = + message->GetReflection()->HasField(*message, field_descriptor); + return PyBool_FromLong(has_field ? 1 : 0); +} + +static PyObject* CMessage_HasFieldByDescriptor(CMessage* self, PyObject* arg) { + CFieldDescriptor* cfield_descriptor = NULL; + if (!PyObject_TypeCheck(reinterpret_cast(arg), + &CFieldDescriptor_Type)) { + PyErr_SetString(PyExc_TypeError, "Must be a field descriptor"); + return NULL; + } + cfield_descriptor = reinterpret_cast(arg); + + google::protobuf::Message* message = self->message; + const google::protobuf::FieldDescriptor* field_descriptor = + cfield_descriptor->descriptor; + + if (!FIELD_BELONGS_TO_MESSAGE(field_descriptor, message)) { + PyErr_SetString(PyExc_KeyError, + "Field does not belong to message!"); + return NULL; + } + + if (FIELD_IS_REPEATED(field_descriptor)) { + PyErr_SetString(PyExc_KeyError, + "Field is repeated. A singular method is required."); + return NULL; + } + + bool has_field = + message->GetReflection()->HasField(*message, field_descriptor); + return PyBool_FromLong(has_field ? 1 : 0); +} + +static PyObject* CMessage_ClearFieldByDescriptor( + CMessage* self, PyObject* arg) { + CFieldDescriptor* cfield_descriptor = NULL; + if (!PyObject_TypeCheck(reinterpret_cast(arg), + &CFieldDescriptor_Type)) { + PyErr_SetString(PyExc_TypeError, "Must be a field descriptor"); + return NULL; + } + cfield_descriptor = reinterpret_cast(arg); + + google::protobuf::Message* message = self->message; + const google::protobuf::FieldDescriptor* field_descriptor = + cfield_descriptor->descriptor; + + if (!FIELD_BELONGS_TO_MESSAGE(field_descriptor, message)) { + PyErr_SetString(PyExc_KeyError, + "Field does not belong to message!"); + return NULL; + } + + message->GetReflection()->ClearField(message, field_descriptor); + Py_RETURN_NONE; +} + +static PyObject* CMessage_ClearField(CMessage* self, PyObject* args) { + char* field_name; + CMessage* child_cmessage = NULL; + if (!PyArg_ParseTuple(args, C("s|O!:ClearField"), &field_name, + &CMessage_Type, &child_cmessage)) { + return NULL; + } + + google::protobuf::Message* message = self->message; + const google::protobuf::Descriptor* descriptor = message->GetDescriptor(); + const google::protobuf::FieldDescriptor* field_descriptor = + descriptor->FindFieldByName(field_name); + if (field_descriptor == NULL) { + PyErr_Format(PyExc_ValueError, "Unknown field %s.", field_name); + return NULL; + } + + if (child_cmessage != NULL && !FIELD_IS_REPEATED(field_descriptor)) { + ReleaseSubMessage(message, field_descriptor, child_cmessage); + } else { + message->GetReflection()->ClearField(message, field_descriptor); + } + Py_RETURN_NONE; +} + +static PyObject* CMessage_GetScalar(CMessage* self, PyObject* arg) { + CFieldDescriptor* cdescriptor = NULL; + if (!PyObject_TypeCheck(reinterpret_cast(arg), + &CFieldDescriptor_Type)) { + PyErr_SetString(PyExc_TypeError, "Must be a field descriptor"); + return NULL; + } + cdescriptor = reinterpret_cast(arg); + + google::protobuf::Message* message = self->message; + return InternalGetScalar(message, cdescriptor->descriptor); +} + +static PyObject* CMessage_GetRepeatedScalar(CMessage* self, PyObject* args) { + CFieldDescriptor* cfield_descriptor; + PyObject* slice; + if (!PyArg_ParseTuple(args, C("O!O:GetRepeatedScalar"), + &CFieldDescriptor_Type, &cfield_descriptor, &slice)) { + return NULL; + } + + return InternalGetRepeatedScalarSlice( + self, cfield_descriptor->descriptor, slice); +} + +static PyObject* CMessage_AssignRepeatedScalar(CMessage* self, PyObject* args) { + CFieldDescriptor* cfield_descriptor; + PyObject* slice; + if (!PyArg_ParseTuple(args, C("O!O:AssignRepeatedScalar"), + &CFieldDescriptor_Type, &cfield_descriptor, &slice)) { + return NULL; + } + + AssureWritable(self); + google::protobuf::Message* message = self->message; + message->GetReflection()->ClearField(message, cfield_descriptor->descriptor); + + PyObject* iter = PyObject_GetIter(slice); + PyObject* next; + while ((next = PyIter_Next(iter)) != NULL) { + if (InternalAddRepeatedScalar( + message, cfield_descriptor->descriptor, next) == NULL) { + Py_DECREF(next); + Py_DECREF(iter); + return NULL; + } + Py_DECREF(next); + } + Py_DECREF(iter); + Py_RETURN_NONE; +} + +static PyObject* CMessage_DeleteRepeatedField(CMessage* self, PyObject* args) { + CFieldDescriptor* cfield_descriptor; + PyObject* slice; + if (!PyArg_ParseTuple(args, C("O!O:DeleteRepeatedField"), + &CFieldDescriptor_Type, &cfield_descriptor, &slice)) { + return NULL; + } + AssureWritable(self); + + Py_ssize_t length, from, to, step, slice_length; + google::protobuf::Message* message = self->message; + const google::protobuf::FieldDescriptor* field_descriptor = + cfield_descriptor->descriptor; + const google::protobuf::Reflection* reflection = message->GetReflection(); + int min, max; + length = reflection->FieldSize(*message, field_descriptor); + + if (PyInt_Check(slice) || PyLong_Check(slice)) { + from = to = PyLong_AsLong(slice); + if (from < 0) { + from = to = length + from; + } + step = 1; + min = max = from; + + // Range check. + if (from < 0 || from >= length) { + PyErr_Format(PyExc_IndexError, "list assignment index out of range"); + return NULL; + } + } else if (PySlice_Check(slice)) { + from = to = step = slice_length = 0; + PySlice_GetIndicesEx( + reinterpret_cast(slice), + length, &from, &to, &step, &slice_length); + if (from < to) { + min = from; + max = to - 1; + } else { + min = to + 1; + max = from; + } + } else { + PyErr_SetString(PyExc_TypeError, "list indices must be integers"); + return NULL; + } + + Py_ssize_t i = from; + std::vector to_delete(length, false); + while (i >= min && i <= max) { + to_delete[i] = true; + i += step; + } + + to = 0; + for (i = 0; i < length; ++i) { + if (!to_delete[i]) { + if (i != to) { + reflection->SwapElements(message, field_descriptor, i, to); + } + ++to; + } + } + + while (i > to) { + reflection->RemoveLast(message, field_descriptor); + --i; + } + + Py_RETURN_NONE; +} + + +static PyObject* CMessage_SetScalar(CMessage* self, PyObject* args) { + CFieldDescriptor* cfield_descriptor; + PyObject* arg; + if (!PyArg_ParseTuple(args, C("O!O:SetScalar"), + &CFieldDescriptor_Type, &cfield_descriptor, &arg)) { + return NULL; + } + AssureWritable(self); + + return InternalSetScalar(self->message, cfield_descriptor->descriptor, arg); +} + +static PyObject* CMessage_AddRepeatedScalar(CMessage* self, PyObject* args) { + CFieldDescriptor* cfield_descriptor; + PyObject* value; + if (!PyArg_ParseTuple(args, C("O!O:AddRepeatedScalar"), + &CFieldDescriptor_Type, &cfield_descriptor, &value)) { + return NULL; + } + AssureWritable(self); + + return InternalAddRepeatedScalar( + self->message, cfield_descriptor->descriptor, value); +} + +static PyObject* CMessage_FieldLength(CMessage* self, PyObject* arg) { + CFieldDescriptor* cfield_descriptor; + if (!PyObject_TypeCheck(reinterpret_cast(arg), + &CFieldDescriptor_Type)) { + PyErr_SetString(PyExc_TypeError, "Must be a field descriptor"); + return NULL; + } + cfield_descriptor = reinterpret_cast(arg); + + google::protobuf::Message* message = self->message; + int length = message->GetReflection()->FieldSize( + *message, cfield_descriptor->descriptor); + return PyInt_FromLong(length); +} + +static PyObject* CMessage_DebugString(CMessage* self, PyObject* args) { + return PyString_FromString(self->message->DebugString().c_str()); +} + +static PyObject* CMessage_SerializeToString(CMessage* self, PyObject* args) { + int size = self->message->ByteSize(); + if (size <= 0) { + return PyString_FromString(""); + } + PyObject* result = PyString_FromStringAndSize(NULL, size); + if (result == NULL) { + return NULL; + } + char* buffer = PyString_AS_STRING(result); + self->message->SerializeWithCachedSizesToArray( + reinterpret_cast(buffer)); + return result; +} + +static PyObject* CMessage_SerializePartialToString( + CMessage* self, PyObject* args) { + string contents; + self->message->SerializePartialToString(&contents); + return PyString_FromStringAndSize(contents.c_str(), contents.size()); +} + +static PyObject* CMessageStr(CMessage* self) { + char str[1024]; + str[sizeof(str) - 1] = 0; + snprintf(str, sizeof(str) - 1, "CMessage: <%p>", self->message); + return PyString_FromString(str); +} + +static PyObject* CMessage_MergeFrom(CMessage* self, PyObject* arg) { + CMessage* other_message; + if (!PyObject_TypeCheck(reinterpret_cast(arg), &CMessage_Type)) { + PyErr_SetString(PyExc_TypeError, "Must be a message"); + return NULL; + } + + other_message = reinterpret_cast(arg); + if (other_message->message->GetDescriptor() != + self->message->GetDescriptor()) { + PyErr_Format(PyExc_TypeError, + "Tried to merge from a message with a different type. " + "to: %s, from: %s", + self->message->GetDescriptor()->full_name().c_str(), + other_message->message->GetDescriptor()->full_name().c_str()); + return NULL; + } + AssureWritable(self); + + self->message->MergeFrom(*other_message->message); + Py_RETURN_NONE; +} + +static PyObject* CMessage_CopyFrom(CMessage* self, PyObject* arg) { + CMessage* other_message; + if (!PyObject_TypeCheck(reinterpret_cast(arg), &CMessage_Type)) { + PyErr_SetString(PyExc_TypeError, "Must be a message"); + return NULL; + } + + other_message = reinterpret_cast(arg); + if (other_message->message->GetDescriptor() != + self->message->GetDescriptor()) { + PyErr_Format(PyExc_TypeError, + "Tried to copy from a message with a different type. " + "to: %s, from: %s", + self->message->GetDescriptor()->full_name().c_str(), + other_message->message->GetDescriptor()->full_name().c_str()); + return NULL; + } + + AssureWritable(self); + + self->message->CopyFrom(*other_message->message); + Py_RETURN_NONE; +} + +static PyObject* CMessage_MergeFromString(CMessage* self, PyObject* arg) { + const void* data; + Py_ssize_t data_length; + if (PyObject_AsReadBuffer(arg, &data, &data_length) < 0) { + return NULL; + } + + AssureWritable(self); + google::protobuf::io::CodedInputStream input( + reinterpret_cast(data), data_length); + input.SetExtensionRegistry(GetDescriptorPool(), global_message_factory); + bool success = self->message->MergePartialFromCodedStream(&input); + if (success) { + return PyInt_FromLong(self->message->ByteSize()); + } else { + return PyInt_FromLong(-1); + } +} + +static PyObject* CMessage_ByteSize(CMessage* self, PyObject* args) { + return PyLong_FromLong(self->message->ByteSize()); +} + +static PyObject* CMessage_SetInParent(CMessage* self, PyObject* args) { + AssureWritable(self); + Py_RETURN_NONE; +} + +static PyObject* CMessage_SwapRepeatedFieldElements( + CMessage* self, PyObject* args) { + CFieldDescriptor* cfield_descriptor; + int index1, index2; + if (!PyArg_ParseTuple(args, C("O!ii:SwapRepeatedFieldElements"), + &CFieldDescriptor_Type, &cfield_descriptor, + &index1, &index2)) { + return NULL; + } + + google::protobuf::Message* message = self->message; + const google::protobuf::Reflection* reflection = message->GetReflection(); + + reflection->SwapElements( + message, cfield_descriptor->descriptor, index1, index2); + Py_RETURN_NONE; +} + +static PyObject* CMessage_AddMessage(CMessage* self, PyObject* arg) { + CFieldDescriptor* cfield_descriptor; + if (!PyObject_TypeCheck(reinterpret_cast(arg), + &CFieldDescriptor_Type)) { + PyErr_SetString(PyExc_TypeError, "Must be a field descriptor"); + return NULL; + } + cfield_descriptor = reinterpret_cast(arg); + AssureWritable(self); + + CMessage* py_cmsg = PyObject_New(CMessage, &CMessage_Type); + if (py_cmsg == NULL) { + return NULL; + } + + google::protobuf::Message* message = self->message; + const google::protobuf::Reflection* reflection = message->GetReflection(); + google::protobuf::Message* sub_message = + reflection->AddMessage(message, cfield_descriptor->descriptor); + + py_cmsg->parent = NULL; + py_cmsg->full_name = sub_message->GetDescriptor()->full_name().c_str(); + py_cmsg->message = sub_message; + py_cmsg->free_message = false; + py_cmsg->read_only = false; + return reinterpret_cast(py_cmsg); +} + +static PyObject* CMessage_GetRepeatedMessage(CMessage* self, PyObject* args) { + CFieldDescriptor* cfield_descriptor; + PyObject* slice; + if (!PyArg_ParseTuple(args, C("O!O:GetRepeatedMessage"), + &CFieldDescriptor_Type, &cfield_descriptor, &slice)) { + return NULL; + } + + return InternalGetRepeatedScalarSlice( + self, cfield_descriptor->descriptor, slice); +} + +static PyObject* CMessage_NewSubMessage(CMessage* self, PyObject* arg) { + CFieldDescriptor* cfield_descriptor; + if (!PyObject_TypeCheck(reinterpret_cast(arg), + &CFieldDescriptor_Type)) { + PyErr_SetString(PyExc_TypeError, "Must be a field descriptor"); + return NULL; + } + cfield_descriptor = reinterpret_cast(arg); + + CMessage* py_cmsg = PyObject_New(CMessage, &CMessage_Type); + if (py_cmsg == NULL) { + return NULL; + } + + google::protobuf::Message* message = self->message; + const google::protobuf::Reflection* reflection = message->GetReflection(); + const google::protobuf::Message& sub_message = + reflection->GetMessage(*message, cfield_descriptor->descriptor, + global_message_factory); + + py_cmsg->full_name = sub_message.GetDescriptor()->full_name().c_str(); + py_cmsg->parent = self; + py_cmsg->parent_field = cfield_descriptor; + py_cmsg->message = const_cast(&sub_message); + py_cmsg->free_message = false; + py_cmsg->read_only = true; + return reinterpret_cast(py_cmsg); +} + +static PyObject* CMessage_MutableMessage(CMessage* self, PyObject* arg) { + CFieldDescriptor* cfield_descriptor; + if (!PyObject_TypeCheck(reinterpret_cast(arg), + &CFieldDescriptor_Type)) { + PyErr_SetString(PyExc_TypeError, "Must be a field descriptor"); + return NULL; + } + cfield_descriptor = reinterpret_cast(arg); + AssureWritable(self); + + CMessage* py_cmsg = PyObject_New(CMessage, &CMessage_Type); + if (py_cmsg == NULL) { + return NULL; + } + + google::protobuf::Message* message = self->message; + const google::protobuf::Reflection* reflection = message->GetReflection(); + google::protobuf::Message* mutable_message = + reflection->MutableMessage(message, cfield_descriptor->descriptor, + global_message_factory); + + py_cmsg->full_name = mutable_message->GetDescriptor()->full_name().c_str(); + py_cmsg->message = mutable_message; + py_cmsg->free_message = false; + py_cmsg->read_only = false; + return reinterpret_cast(py_cmsg); +} + +static PyObject* CMessage_Equals(CMessage* self, PyObject* arg) { + CMessage* other_message; + if (!PyObject_TypeCheck(reinterpret_cast(arg), &CMessage_Type)) { + PyErr_SetString(PyExc_TypeError, "Must be a message"); + return NULL; + } + other_message = reinterpret_cast(arg); + + if (other_message->message == self->message) { + return PyBool_FromLong(1); + } + + if (other_message->message->GetDescriptor() != + self->message->GetDescriptor()) { + return PyBool_FromLong(0); + } + + return PyBool_FromLong(1); +} + +static PyObject* CMessage_ListFields(CMessage* self, PyObject* args) { + google::protobuf::Message* message = self->message; + const google::protobuf::Reflection* reflection = message->GetReflection(); + vector fields; + reflection->ListFields(*message, &fields); + + PyObject* list = PyList_New(fields.size()); + if (list == NULL) { + return NULL; + } + + for (unsigned int i = 0; i < fields.size(); ++i) { + bool is_extension = fields[i]->is_extension(); + PyObject* t = PyTuple_New(2); + if (t == NULL) { + Py_DECREF(list); + return NULL; + } + + PyObject* is_extension_object = PyBool_FromLong(is_extension ? 1 : 0); + + PyObject* field_name; + const string* s; + if (is_extension) { + s = &fields[i]->full_name(); + } else { + s = &fields[i]->name(); + } + field_name = PyString_FromStringAndSize(s->c_str(), s->length()); + if (field_name == NULL) { + Py_DECREF(list); + Py_DECREF(t); + return NULL; + } + + PyTuple_SET_ITEM(t, 0, is_extension_object); + PyTuple_SET_ITEM(t, 1, field_name); + PyList_SET_ITEM(list, i, t); + } + + return list; +} + +static PyObject* CMessage_FindInitializationErrors(CMessage* self) { + google::protobuf::Message* message = self->message; + vector errors; + message->FindInitializationErrors(&errors); + + PyObject* error_list = PyList_New(errors.size()); + if (error_list == NULL) { + return NULL; + } + for (unsigned int i = 0; i < errors.size(); ++i) { + const string& error = errors[i]; + PyObject* error_string = PyString_FromStringAndSize( + error.c_str(), error.length()); + if (error_string == NULL) { + Py_DECREF(error_list); + return NULL; + } + PyList_SET_ITEM(error_list, i, error_string); + } + return error_list; +} + +// ------ Python Constructor: + +PyObject* Python_NewCMessage(PyObject* ignored, PyObject* arg) { + const char* message_type = PyString_AsString(arg); + if (message_type == NULL) { + return NULL; + } + + const google::protobuf::Message* message = CreateMessage(message_type); + if (message == NULL) { + PyErr_Format(PyExc_TypeError, "Couldn't create message of type %s!", + message_type); + return NULL; + } + + CMessage* py_cmsg = PyObject_New(CMessage, &CMessage_Type); + if (py_cmsg == NULL) { + return NULL; + } + py_cmsg->message = message->New(); + py_cmsg->free_message = true; + py_cmsg->full_name = message->GetDescriptor()->full_name().c_str(); + py_cmsg->read_only = false; + py_cmsg->parent = NULL; + py_cmsg->parent_field = NULL; + return reinterpret_cast(py_cmsg); +} + +// --- Module Functions (exposed to Python): + +PyMethodDef methods[] = { + { C("NewCMessage"), (PyCFunction)Python_NewCMessage, + METH_O, + C("Creates a new C++ protocol message, given its full name.") }, + { C("NewCDescriptorPool"), (PyCFunction)Python_NewCDescriptorPool, + METH_NOARGS, + C("Creates a new C++ descriptor pool.") }, + { C("BuildFile"), (PyCFunction)Python_BuildFile, + METH_O, + C("Registers a new protocol buffer file in the global C++ descriptor " + "pool.") }, + {NULL} +}; + +// --- Exposing the C proto living inside Python proto to C code: + +extern const Message* (*GetCProtoInsidePyProtoPtr)(PyObject* msg); +extern Message* (*MutableCProtoInsidePyProtoPtr)(PyObject* msg); + +static const google::protobuf::Message* GetCProtoInsidePyProtoImpl(PyObject* msg) { + PyObject* c_msg_obj = PyObject_GetAttrString(msg, "_cmsg"); + if (c_msg_obj == NULL) { + PyErr_Clear(); + return NULL; + } + Py_DECREF(c_msg_obj); + if (!PyObject_TypeCheck(c_msg_obj, &CMessage_Type)) { + return NULL; + } + CMessage* c_msg = reinterpret_cast(c_msg_obj); + return c_msg->message; +} + +static google::protobuf::Message* MutableCProtoInsidePyProtoImpl(PyObject* msg) { + PyObject* c_msg_obj = PyObject_GetAttrString(msg, "_cmsg"); + if (c_msg_obj == NULL) { + PyErr_Clear(); + return NULL; + } + Py_DECREF(c_msg_obj); + if (!PyObject_TypeCheck(c_msg_obj, &CMessage_Type)) { + return NULL; + } + CMessage* c_msg = reinterpret_cast(c_msg_obj); + AssureWritable(c_msg); + return c_msg->message; +} + +// --- Module Init Function: + +static const char module_docstring[] = +"python-proto2 is a module that can be used to enhance proto2 Python API\n" +"performance.\n" +"\n" +"It provides access to the protocol buffers C++ reflection API that\n" +"implements the basic protocol buffer functions."; + +extern "C" { + void init_net_proto2___python() { + // Initialize constants. + kPythonZero = PyInt_FromLong(0); + kint32min_py = PyInt_FromLong(kint32min); + kint32max_py = PyInt_FromLong(kint32max); + kuint32max_py = PyLong_FromLongLong(kuint32max); + kint64min_py = PyLong_FromLongLong(kint64min); + kint64max_py = PyLong_FromLongLong(kint64max); + kuint64max_py = PyLong_FromUnsignedLongLong(kuint64max); + + global_message_factory = new DynamicMessageFactory(GetDescriptorPool()); + global_message_factory->SetDelegateToGeneratedFactory(true); + + // Export our functions to Python. + PyObject *m; + m = Py_InitModule3(C("_net_proto2___python"), methods, C(module_docstring)); + if (m == NULL) { + return; + } + + AddConstants(m); + + CMessage_Type.tp_new = PyType_GenericNew; + if (PyType_Ready(&CMessage_Type) < 0) { + return; + } + + if (!InitDescriptor()) { + return; + } + + // Override {Get,Mutable}CProtoInsidePyProto. + GetCProtoInsidePyProtoPtr = GetCProtoInsidePyProtoImpl; + MutableCProtoInsidePyProtoPtr = MutableCProtoInsidePyProtoImpl; + } +} + +} // namespace python +} // namespace protobuf +} // namespace google diff --git a/code/push/google/protobuf/pyext/python_descriptor.cc b/code/push/google/protobuf/pyext/python_descriptor.cc new file mode 100644 index 0000000..5e3e9ea --- /dev/null +++ b/code/push/google/protobuf/pyext/python_descriptor.cc @@ -0,0 +1,337 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: petar@google.com (Petar Petrov) + +#include +#include + +#include +#include + +#define C(str) const_cast(str) + +namespace google { +namespace protobuf { +namespace python { + + +static void CFieldDescriptorDealloc(CFieldDescriptor* self); + +static google::protobuf::DescriptorPool* g_descriptor_pool = NULL; + +static PyObject* CFieldDescriptor_GetFullName( + CFieldDescriptor* self, void *closure) { + Py_XINCREF(self->full_name); + return self->full_name; +} + +static PyObject* CFieldDescriptor_GetName( + CFieldDescriptor *self, void *closure) { + Py_XINCREF(self->name); + return self->name; +} + +static PyObject* CFieldDescriptor_GetCppType( + CFieldDescriptor *self, void *closure) { + Py_XINCREF(self->cpp_type); + return self->cpp_type; +} + +static PyObject* CFieldDescriptor_GetLabel( + CFieldDescriptor *self, void *closure) { + Py_XINCREF(self->label); + return self->label; +} + +static PyObject* CFieldDescriptor_GetID( + CFieldDescriptor *self, void *closure) { + Py_XINCREF(self->id); + return self->id; +} + + +static PyGetSetDef CFieldDescriptorGetters[] = { + { C("full_name"), + (getter)CFieldDescriptor_GetFullName, NULL, "Full name", NULL}, + { C("name"), + (getter)CFieldDescriptor_GetName, NULL, "last name", NULL}, + { C("cpp_type"), + (getter)CFieldDescriptor_GetCppType, NULL, "C++ Type", NULL}, + { C("label"), + (getter)CFieldDescriptor_GetLabel, NULL, "Label", NULL}, + { C("id"), + (getter)CFieldDescriptor_GetID, NULL, "ID", NULL}, + {NULL} +}; + +PyTypeObject CFieldDescriptor_Type = { + PyObject_HEAD_INIT(&PyType_Type) + 0, + C("google.protobuf.internal." + "_net_proto2___python." + "CFieldDescriptor"), // tp_name + sizeof(CFieldDescriptor), // tp_basicsize + 0, // tp_itemsize + (destructor)CFieldDescriptorDealloc, // tp_dealloc + 0, // tp_print + 0, // tp_getattr + 0, // tp_setattr + 0, // tp_compare + 0, // tp_repr + 0, // tp_as_number + 0, // tp_as_sequence + 0, // tp_as_mapping + 0, // tp_hash + 0, // tp_call + 0, // tp_str + 0, // tp_getattro + 0, // tp_setattro + 0, // tp_as_buffer + Py_TPFLAGS_DEFAULT, // tp_flags + C("A Field Descriptor"), // tp_doc + 0, // tp_traverse + 0, // tp_clear + 0, // tp_richcompare + 0, // tp_weaklistoffset + 0, // tp_iter + 0, // tp_iternext + 0, // tp_methods + 0, // tp_members + CFieldDescriptorGetters, // tp_getset + 0, // tp_base + 0, // tp_dict + 0, // tp_descr_get + 0, // tp_descr_set + 0, // tp_dictoffset + 0, // tp_init + PyType_GenericAlloc, // tp_alloc + PyType_GenericNew, // tp_new + PyObject_Del, // tp_free +}; + +static void CFieldDescriptorDealloc(CFieldDescriptor* self) { + Py_DECREF(self->full_name); + Py_DECREF(self->name); + Py_DECREF(self->cpp_type); + Py_DECREF(self->label); + Py_DECREF(self->id); + self->ob_type->tp_free(reinterpret_cast(self)); +} + +typedef struct { + PyObject_HEAD + + const google::protobuf::DescriptorPool* pool; +} CDescriptorPool; + +static void CDescriptorPoolDealloc(CDescriptorPool* self); + +static PyObject* CDescriptorPool_NewCDescriptor( + const google::protobuf::FieldDescriptor* field_descriptor) { + CFieldDescriptor* cfield_descriptor = PyObject_New( + CFieldDescriptor, &CFieldDescriptor_Type); + if (cfield_descriptor == NULL) { + return NULL; + } + cfield_descriptor->descriptor = field_descriptor; + + cfield_descriptor->full_name = PyString_FromString( + field_descriptor->full_name().c_str()); + cfield_descriptor->name = PyString_FromString( + field_descriptor->name().c_str()); + cfield_descriptor->cpp_type = PyLong_FromLong(field_descriptor->cpp_type()); + cfield_descriptor->label = PyLong_FromLong(field_descriptor->label()); + cfield_descriptor->id = PyLong_FromVoidPtr(cfield_descriptor); + return reinterpret_cast(cfield_descriptor); +} + +static PyObject* CDescriptorPool_FindFieldByName( + CDescriptorPool* self, PyObject* arg) { + const char* full_field_name = PyString_AsString(arg); + if (full_field_name == NULL) { + return NULL; + } + + const google::protobuf::FieldDescriptor* field_descriptor = NULL; + + field_descriptor = self->pool->FindFieldByName(full_field_name); + + + if (field_descriptor == NULL) { + PyErr_Format(PyExc_TypeError, "Couldn't find field %.200s", + full_field_name); + return NULL; + } + + return CDescriptorPool_NewCDescriptor(field_descriptor); +} + +static PyObject* CDescriptorPool_FindExtensionByName( + CDescriptorPool* self, PyObject* arg) { + const char* full_field_name = PyString_AsString(arg); + if (full_field_name == NULL) { + return NULL; + } + + const google::protobuf::FieldDescriptor* field_descriptor = + self->pool->FindExtensionByName(full_field_name); + if (field_descriptor == NULL) { + PyErr_Format(PyExc_TypeError, "Couldn't find field %.200s", + full_field_name); + return NULL; + } + + return CDescriptorPool_NewCDescriptor(field_descriptor); +} + +static PyMethodDef CDescriptorPoolMethods[] = { + { C("FindFieldByName"), + (PyCFunction)CDescriptorPool_FindFieldByName, + METH_O, + C("Searches for a field descriptor by full name.") }, + { C("FindExtensionByName"), + (PyCFunction)CDescriptorPool_FindExtensionByName, + METH_O, + C("Searches for extension descriptor by full name.") }, + {NULL} +}; + +PyTypeObject CDescriptorPool_Type = { + PyObject_HEAD_INIT(&PyType_Type) + 0, + C("google.protobuf.internal." + "_net_proto2___python." + "CFieldDescriptor"), // tp_name + sizeof(CDescriptorPool), // tp_basicsize + 0, // tp_itemsize + (destructor)CDescriptorPoolDealloc, // tp_dealloc + 0, // tp_print + 0, // tp_getattr + 0, // tp_setattr + 0, // tp_compare + 0, // tp_repr + 0, // tp_as_number + 0, // tp_as_sequence + 0, // tp_as_mapping + 0, // tp_hash + 0, // tp_call + 0, // tp_str + 0, // tp_getattro + 0, // tp_setattro + 0, // tp_as_buffer + Py_TPFLAGS_DEFAULT, // tp_flags + C("A Descriptor Pool"), // tp_doc + 0, // tp_traverse + 0, // tp_clear + 0, // tp_richcompare + 0, // tp_weaklistoffset + 0, // tp_iter + 0, // tp_iternext + CDescriptorPoolMethods, // tp_methods + 0, // tp_members + 0, // tp_getset + 0, // tp_base + 0, // tp_dict + 0, // tp_descr_get + 0, // tp_descr_set + 0, // tp_dictoffset + 0, // tp_init + PyType_GenericAlloc, // tp_alloc + PyType_GenericNew, // tp_new + PyObject_Del, // tp_free +}; + +static void CDescriptorPoolDealloc(CDescriptorPool* self) { + self->ob_type->tp_free(reinterpret_cast(self)); +} + +google::protobuf::DescriptorPool* GetDescriptorPool() { + if (g_descriptor_pool == NULL) { + g_descriptor_pool = new google::protobuf::DescriptorPool( + google::protobuf::DescriptorPool::generated_pool()); + } + return g_descriptor_pool; +} + +PyObject* Python_NewCDescriptorPool(PyObject* ignored, PyObject* args) { + CDescriptorPool* cdescriptor_pool = PyObject_New( + CDescriptorPool, &CDescriptorPool_Type); + if (cdescriptor_pool == NULL) { + return NULL; + } + cdescriptor_pool->pool = GetDescriptorPool(); + return reinterpret_cast(cdescriptor_pool); +} + +PyObject* Python_BuildFile(PyObject* ignored, PyObject* arg) { + char* message_type; + Py_ssize_t message_len; + + if (PyString_AsStringAndSize(arg, &message_type, &message_len) < 0) { + return NULL; + } + + google::protobuf::FileDescriptorProto file_proto; + if (!file_proto.ParseFromArray(message_type, message_len)) { + PyErr_SetString(PyExc_TypeError, "Couldn't parse file content!"); + return NULL; + } + + if (google::protobuf::DescriptorPool::generated_pool()->FindFileByName( + file_proto.name()) != NULL) { + Py_RETURN_NONE; + } + + const google::protobuf::FileDescriptor* descriptor = GetDescriptorPool()->BuildFile( + file_proto); + if (descriptor == NULL) { + PyErr_SetString(PyExc_TypeError, + "Couldn't build proto file into descriptor pool!"); + return NULL; + } + + Py_RETURN_NONE; +} + +bool InitDescriptor() { + CFieldDescriptor_Type.tp_new = PyType_GenericNew; + if (PyType_Ready(&CFieldDescriptor_Type) < 0) + return false; + + CDescriptorPool_Type.tp_new = PyType_GenericNew; + if (PyType_Ready(&CDescriptorPool_Type) < 0) + return false; + return true; +} + +} // namespace python +} // namespace protobuf +} // namespace google diff --git a/code/push/google/protobuf/pyext/python_descriptor.h b/code/push/google/protobuf/pyext/python_descriptor.h new file mode 100644 index 0000000..5232680 --- /dev/null +++ b/code/push/google/protobuf/pyext/python_descriptor.h @@ -0,0 +1,87 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: petar@google.com (Petar Petrov) + +#ifndef GOOGLE_PROTOBUF_PYTHON_DESCRIPTOR_H__ +#define GOOGLE_PROTOBUF_PYTHON_DESCRIPTOR_H__ + +#include +#include + +#include + +#if PY_VERSION_HEX < 0x02050000 && !defined(PY_SSIZE_T_MIN) +typedef int Py_ssize_t; +#define PY_SSIZE_T_MAX INT_MAX +#define PY_SSIZE_T_MIN INT_MIN +#endif + +namespace google { +namespace protobuf { +namespace python { + +typedef struct { + PyObject_HEAD + + // The proto2 descriptor that this object represents. + const google::protobuf::FieldDescriptor* descriptor; + + // Full name of the field (PyString). + PyObject* full_name; + + // Name of the field (PyString). + PyObject* name; + + // C++ type of the field (PyLong). + PyObject* cpp_type; + + // Name of the field (PyLong). + PyObject* label; + + // Identity of the descriptor (PyLong used as a poiner). + PyObject* id; +} CFieldDescriptor; + +extern PyTypeObject CFieldDescriptor_Type; + +extern PyTypeObject CDescriptorPool_Type; + + +PyObject* Python_NewCDescriptorPool(PyObject* ignored, PyObject* args); +PyObject* Python_BuildFile(PyObject* ignored, PyObject* args); +bool InitDescriptor(); +google::protobuf::DescriptorPool* GetDescriptorPool(); + +} // namespace python +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_PYTHON_DESCRIPTOR_H__ diff --git a/code/push/google/protobuf/pyext/python_protobuf.cc b/code/push/google/protobuf/pyext/python_protobuf.cc new file mode 100644 index 0000000..1b1ab5d --- /dev/null +++ b/code/push/google/protobuf/pyext/python_protobuf.cc @@ -0,0 +1,63 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: qrczak@google.com (Marcin Kowalczyk) + +#include + +namespace google { +namespace protobuf { +namespace python { + +static const Message* GetCProtoInsidePyProtoStub(PyObject* msg) { + return NULL; +} +static Message* MutableCProtoInsidePyProtoStub(PyObject* msg) { + return NULL; +} + +// This is initialized with a default, stub implementation. +// If python-google.protobuf.cc is loaded, the function pointer is overridden +// with a full implementation. +const Message* (*GetCProtoInsidePyProtoPtr)(PyObject* msg) = + GetCProtoInsidePyProtoStub; +Message* (*MutableCProtoInsidePyProtoPtr)(PyObject* msg) = + MutableCProtoInsidePyProtoStub; + +const Message* GetCProtoInsidePyProto(PyObject* msg) { + return GetCProtoInsidePyProtoPtr(msg); +} +Message* MutableCProtoInsidePyProto(PyObject* msg) { + return MutableCProtoInsidePyProtoPtr(msg); +} + +} // namespace python +} // namespace protobuf +} // namespace google diff --git a/code/push/google/protobuf/pyext/python_protobuf.h b/code/push/google/protobuf/pyext/python_protobuf.h new file mode 100644 index 0000000..c5b0b1c --- /dev/null +++ b/code/push/google/protobuf/pyext/python_protobuf.h @@ -0,0 +1,57 @@ +// Protocol Buffers - Google's data interchange format +// Copyright 2008 Google Inc. All rights reserved. +// http://code.google.com/p/protobuf/ +// +// Redistribution and use in source and binary forms, with or without +// modification, are permitted provided that the following conditions are +// met: +// +// * Redistributions of source code must retain the above copyright +// notice, this list of conditions and the following disclaimer. +// * Redistributions in binary form must reproduce the above +// copyright notice, this list of conditions and the following disclaimer +// in the documentation and/or other materials provided with the +// distribution. +// * Neither the name of Google Inc. nor the names of its +// contributors may be used to endorse or promote products derived from +// this software without specific prior written permission. +// +// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +// Author: qrczak@google.com (Marcin Kowalczyk) +// +// This module exposes the C proto inside the given Python proto, in +// case the Python proto is implemented with a C proto. + +#ifndef GOOGLE_PROTOBUF_PYTHON_PYTHON_PROTOBUF_H__ +#define GOOGLE_PROTOBUF_PYTHON_PYTHON_PROTOBUF_H__ + +#include + +namespace google { +namespace protobuf { + +class Message; + +namespace python { + +// Return the pointer to the C proto inside the given Python proto, +// or NULL when this is not a Python proto implemented with a C proto. +const Message* GetCProtoInsidePyProto(PyObject* msg); +Message* MutableCProtoInsidePyProto(PyObject* msg); + +} // namespace python +} // namespace protobuf + +} // namespace google +#endif // GOOGLE_PROTOBUF_PYTHON_PYTHON_PROTOBUF_H__ diff --git a/code/push/google/protobuf/reflection.py b/code/push/google/protobuf/reflection.py new file mode 100644 index 0000000..c696725 --- /dev/null +++ b/code/push/google/protobuf/reflection.py @@ -0,0 +1,169 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +# This code is meant to work on Python 2.4 and above only. + +"""Contains a metaclass and helper functions used to create +protocol message classes from Descriptor objects at runtime. + +Recall that a metaclass is the "type" of a class. +(A class is to a metaclass what an instance is to a class.) + +In this case, we use the GeneratedProtocolMessageType metaclass +to inject all the useful functionality into the classes +output by the protocol compiler at compile-time. + +The upshot of all this is that the real implementation +details for ALL pure-Python protocol buffers are *here in +this file*. +""" + +__author__ = 'robinson@google.com (Will Robinson)' + + +from push.google.protobuf.internal import api_implementation +from push.google.protobuf import descriptor as descriptor_mod +from push.google.protobuf import message + +_FieldDescriptor = descriptor_mod.FieldDescriptor + + +if api_implementation.Type() == 'cpp': + if api_implementation.Version() == 2: + from google.protobuf.internal.cpp import cpp_message + _NewMessage = cpp_message.NewMessage + _InitMessage = cpp_message.InitMessage + else: + from google.protobuf.internal import cpp_message + _NewMessage = cpp_message.NewMessage + _InitMessage = cpp_message.InitMessage +else: + from push.google.protobuf.internal import python_message + _NewMessage = python_message.NewMessage + _InitMessage = python_message.InitMessage + + +class GeneratedProtocolMessageType(type): + + """Metaclass for protocol message classes created at runtime from Descriptors. + + We add implementations for all methods described in the Message class. We + also create properties to allow getting/setting all fields in the protocol + message. Finally, we create slots to prevent users from accidentally + "setting" nonexistent fields in the protocol message, which then wouldn't get + serialized / deserialized properly. + + The protocol compiler currently uses this metaclass to create protocol + message classes at runtime. Clients can also manually create their own + classes at runtime, as in this example: + + mydescriptor = Descriptor(.....) + class MyProtoClass(Message): + __metaclass__ = GeneratedProtocolMessageType + DESCRIPTOR = mydescriptor + myproto_instance = MyProtoClass() + myproto.foo_field = 23 + ... + """ + + # Must be consistent with the protocol-compiler code in + # proto2/compiler/internal/generator.*. + _DESCRIPTOR_KEY = 'DESCRIPTOR' + + def __new__(cls, name, bases, dictionary): + """Custom allocation for runtime-generated class types. + + We override __new__ because this is apparently the only place + where we can meaningfully set __slots__ on the class we're creating(?). + (The interplay between metaclasses and slots is not very well-documented). + + Args: + name: Name of the class (ignored, but required by the + metaclass protocol). + bases: Base classes of the class we're constructing. + (Should be message.Message). We ignore this field, but + it's required by the metaclass protocol + dictionary: The class dictionary of the class we're + constructing. dictionary[_DESCRIPTOR_KEY] must contain + a Descriptor object describing this protocol message + type. + + Returns: + Newly-allocated class. + """ + descriptor = dictionary[GeneratedProtocolMessageType._DESCRIPTOR_KEY] + bases = _NewMessage(bases, descriptor, dictionary) + superclass = super(GeneratedProtocolMessageType, cls) + + new_class = superclass.__new__(cls, name, bases, dictionary) + setattr(descriptor, '_concrete_class', new_class) + return new_class + + def __init__(cls, name, bases, dictionary): + """Here we perform the majority of our work on the class. + We add enum getters, an __init__ method, implementations + of all Message methods, and properties for all fields + in the protocol type. + + Args: + name: Name of the class (ignored, but required by the + metaclass protocol). + bases: Base classes of the class we're constructing. + (Should be message.Message). We ignore this field, but + it's required by the metaclass protocol + dictionary: The class dictionary of the class we're + constructing. dictionary[_DESCRIPTOR_KEY] must contain + a Descriptor object describing this protocol message + type. + """ + descriptor = dictionary[GeneratedProtocolMessageType._DESCRIPTOR_KEY] + _InitMessage(descriptor, cls) + superclass = super(GeneratedProtocolMessageType, cls) + superclass.__init__(name, bases, dictionary) + + +def ParseMessage(descriptor, byte_str): + """Generate a new Message instance from this Descriptor and a byte string. + + Args: + descriptor: Protobuf Descriptor object + byte_str: Serialized protocol buffer byte string + + Returns: + Newly created protobuf Message object. + """ + + class _ResultClass(message.Message): + __metaclass__ = GeneratedProtocolMessageType + DESCRIPTOR = descriptor + + new_msg = _ResultClass() + new_msg.ParseFromString(byte_str) + return new_msg diff --git a/code/push/google/protobuf/service.py b/code/push/google/protobuf/service.py new file mode 100644 index 0000000..180b70e --- /dev/null +++ b/code/push/google/protobuf/service.py @@ -0,0 +1,226 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""DEPRECATED: Declares the RPC service interfaces. + +This module declares the abstract interfaces underlying proto2 RPC +services. These are intended to be independent of any particular RPC +implementation, so that proto2 services can be used on top of a variety +of implementations. Starting with version 2.3.0, RPC implementations should +not try to build on these, but should instead provide code generator plugins +which generate code specific to the particular RPC implementation. This way +the generated code can be more appropriate for the implementation in use +and can avoid unnecessary layers of indirection. +""" + +__author__ = 'petar@google.com (Petar Petrov)' + + +class RpcException(Exception): + """Exception raised on failed blocking RPC method call.""" + pass + + +class Service(object): + + """Abstract base interface for protocol-buffer-based RPC services. + + Services themselves are abstract classes (implemented either by servers or as + stubs), but they subclass this base interface. The methods of this + interface can be used to call the methods of the service without knowing + its exact type at compile time (analogous to the Message interface). + """ + + def GetDescriptor(): + """Retrieves this service's descriptor.""" + raise NotImplementedError + + def CallMethod(self, method_descriptor, rpc_controller, + request, done): + """Calls a method of the service specified by method_descriptor. + + If "done" is None then the call is blocking and the response + message will be returned directly. Otherwise the call is asynchronous + and "done" will later be called with the response value. + + In the blocking case, RpcException will be raised on error. + + Preconditions: + * method_descriptor.service == GetDescriptor + * request is of the exact same classes as returned by + GetRequestClass(method). + * After the call has started, the request must not be modified. + * "rpc_controller" is of the correct type for the RPC implementation being + used by this Service. For stubs, the "correct type" depends on the + RpcChannel which the stub is using. + + Postconditions: + * "done" will be called when the method is complete. This may be + before CallMethod() returns or it may be at some point in the future. + * If the RPC failed, the response value passed to "done" will be None. + Further details about the failure can be found by querying the + RpcController. + """ + raise NotImplementedError + + def GetRequestClass(self, method_descriptor): + """Returns the class of the request message for the specified method. + + CallMethod() requires that the request is of a particular subclass of + Message. GetRequestClass() gets the default instance of this required + type. + + Example: + method = service.GetDescriptor().FindMethodByName("Foo") + request = stub.GetRequestClass(method)() + request.ParseFromString(input) + service.CallMethod(method, request, callback) + """ + raise NotImplementedError + + def GetResponseClass(self, method_descriptor): + """Returns the class of the response message for the specified method. + + This method isn't really needed, as the RpcChannel's CallMethod constructs + the response protocol message. It's provided anyway in case it is useful + for the caller to know the response type in advance. + """ + raise NotImplementedError + + +class RpcController(object): + + """An RpcController mediates a single method call. + + The primary purpose of the controller is to provide a way to manipulate + settings specific to the RPC implementation and to find out about RPC-level + errors. The methods provided by the RpcController interface are intended + to be a "least common denominator" set of features which we expect all + implementations to support. Specific implementations may provide more + advanced features (e.g. deadline propagation). + """ + + # Client-side methods below + + def Reset(self): + """Resets the RpcController to its initial state. + + After the RpcController has been reset, it may be reused in + a new call. Must not be called while an RPC is in progress. + """ + raise NotImplementedError + + def Failed(self): + """Returns true if the call failed. + + After a call has finished, returns true if the call failed. The possible + reasons for failure depend on the RPC implementation. Failed() must not + be called before a call has finished. If Failed() returns true, the + contents of the response message are undefined. + """ + raise NotImplementedError + + def ErrorText(self): + """If Failed is true, returns a human-readable description of the error.""" + raise NotImplementedError + + def StartCancel(self): + """Initiate cancellation. + + Advises the RPC system that the caller desires that the RPC call be + canceled. The RPC system may cancel it immediately, may wait awhile and + then cancel it, or may not even cancel the call at all. If the call is + canceled, the "done" callback will still be called and the RpcController + will indicate that the call failed at that time. + """ + raise NotImplementedError + + # Server-side methods below + + def SetFailed(self, reason): + """Sets a failure reason. + + Causes Failed() to return true on the client side. "reason" will be + incorporated into the message returned by ErrorText(). If you find + you need to return machine-readable information about failures, you + should incorporate it into your response protocol buffer and should + NOT call SetFailed(). + """ + raise NotImplementedError + + def IsCanceled(self): + """Checks if the client cancelled the RPC. + + If true, indicates that the client canceled the RPC, so the server may + as well give up on replying to it. The server should still call the + final "done" callback. + """ + raise NotImplementedError + + def NotifyOnCancel(self, callback): + """Sets a callback to invoke on cancel. + + Asks that the given callback be called when the RPC is canceled. The + callback will always be called exactly once. If the RPC completes without + being canceled, the callback will be called after completion. If the RPC + has already been canceled when NotifyOnCancel() is called, the callback + will be called immediately. + + NotifyOnCancel() must be called no more than once per request. + """ + raise NotImplementedError + + +class RpcChannel(object): + + """Abstract interface for an RPC channel. + + An RpcChannel represents a communication line to a service which can be used + to call that service's methods. The service may be running on another + machine. Normally, you should not use an RpcChannel directly, but instead + construct a stub {@link Service} wrapping it. Example: + + Example: + RpcChannel channel = rpcImpl.Channel("remotehost.example.com:1234") + RpcController controller = rpcImpl.Controller() + MyService service = MyService_Stub(channel) + service.MyMethod(controller, request, callback) + """ + + def CallMethod(self, method_descriptor, rpc_controller, + request, response_class, done): + """Calls the method identified by the descriptor. + + Call the given method of the remote service. The signature of this + procedure looks the same as Service.CallMethod(), but the requirements + are less strict in one important way: the request object doesn't have to + be of any specific class as long as its descriptor is method.input_type. + """ + raise NotImplementedError diff --git a/code/push/google/protobuf/service_reflection.py b/code/push/google/protobuf/service_reflection.py new file mode 100644 index 0000000..851e83e --- /dev/null +++ b/code/push/google/protobuf/service_reflection.py @@ -0,0 +1,284 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Contains metaclasses used to create protocol service and service stub +classes from ServiceDescriptor objects at runtime. + +The GeneratedServiceType and GeneratedServiceStubType metaclasses are used to +inject all useful functionality into the classes output by the protocol +compiler at compile-time. +""" + +__author__ = 'petar@google.com (Petar Petrov)' + + +class GeneratedServiceType(type): + + """Metaclass for service classes created at runtime from ServiceDescriptors. + + Implementations for all methods described in the Service class are added here + by this class. We also create properties to allow getting/setting all fields + in the protocol message. + + The protocol compiler currently uses this metaclass to create protocol service + classes at runtime. Clients can also manually create their own classes at + runtime, as in this example: + + mydescriptor = ServiceDescriptor(.....) + class MyProtoService(service.Service): + __metaclass__ = GeneratedServiceType + DESCRIPTOR = mydescriptor + myservice_instance = MyProtoService() + ... + """ + + _DESCRIPTOR_KEY = 'DESCRIPTOR' + + def __init__(cls, name, bases, dictionary): + """Creates a message service class. + + Args: + name: Name of the class (ignored, but required by the metaclass + protocol). + bases: Base classes of the class being constructed. + dictionary: The class dictionary of the class being constructed. + dictionary[_DESCRIPTOR_KEY] must contain a ServiceDescriptor object + describing this protocol service type. + """ + # Don't do anything if this class doesn't have a descriptor. This happens + # when a service class is subclassed. + if GeneratedServiceType._DESCRIPTOR_KEY not in dictionary: + return + descriptor = dictionary[GeneratedServiceType._DESCRIPTOR_KEY] + service_builder = _ServiceBuilder(descriptor) + service_builder.BuildService(cls) + + +class GeneratedServiceStubType(GeneratedServiceType): + + """Metaclass for service stubs created at runtime from ServiceDescriptors. + + This class has similar responsibilities as GeneratedServiceType, except that + it creates the service stub classes. + """ + + _DESCRIPTOR_KEY = 'DESCRIPTOR' + + def __init__(cls, name, bases, dictionary): + """Creates a message service stub class. + + Args: + name: Name of the class (ignored, here). + bases: Base classes of the class being constructed. + dictionary: The class dictionary of the class being constructed. + dictionary[_DESCRIPTOR_KEY] must contain a ServiceDescriptor object + describing this protocol service type. + """ + super(GeneratedServiceStubType, cls).__init__(name, bases, dictionary) + # Don't do anything if this class doesn't have a descriptor. This happens + # when a service stub is subclassed. + if GeneratedServiceStubType._DESCRIPTOR_KEY not in dictionary: + return + descriptor = dictionary[GeneratedServiceStubType._DESCRIPTOR_KEY] + service_stub_builder = _ServiceStubBuilder(descriptor) + service_stub_builder.BuildServiceStub(cls) + + +class _ServiceBuilder(object): + + """This class constructs a protocol service class using a service descriptor. + + Given a service descriptor, this class constructs a class that represents + the specified service descriptor. One service builder instance constructs + exactly one service class. That means all instances of that class share the + same builder. + """ + + def __init__(self, service_descriptor): + """Initializes an instance of the service class builder. + + Args: + service_descriptor: ServiceDescriptor to use when constructing the + service class. + """ + self.descriptor = service_descriptor + + def BuildService(self, cls): + """Constructs the service class. + + Args: + cls: The class that will be constructed. + """ + + # CallMethod needs to operate with an instance of the Service class. This + # internal wrapper function exists only to be able to pass the service + # instance to the method that does the real CallMethod work. + def _WrapCallMethod(srvc, method_descriptor, + rpc_controller, request, callback): + return self._CallMethod(srvc, method_descriptor, + rpc_controller, request, callback) + self.cls = cls + cls.CallMethod = _WrapCallMethod + cls.GetDescriptor = staticmethod(lambda: self.descriptor) + cls.GetDescriptor.__doc__ = "Returns the service descriptor." + cls.GetRequestClass = self._GetRequestClass + cls.GetResponseClass = self._GetResponseClass + for method in self.descriptor.methods: + setattr(cls, method.name, self._GenerateNonImplementedMethod(method)) + + def _CallMethod(self, srvc, method_descriptor, + rpc_controller, request, callback): + """Calls the method described by a given method descriptor. + + Args: + srvc: Instance of the service for which this method is called. + method_descriptor: Descriptor that represent the method to call. + rpc_controller: RPC controller to use for this method's execution. + request: Request protocol message. + callback: A callback to invoke after the method has completed. + """ + if method_descriptor.containing_service != self.descriptor: + raise RuntimeError( + 'CallMethod() given method descriptor for wrong service type.') + method = getattr(srvc, method_descriptor.name) + return method(rpc_controller, request, callback) + + def _GetRequestClass(self, method_descriptor): + """Returns the class of the request protocol message. + + Args: + method_descriptor: Descriptor of the method for which to return the + request protocol message class. + + Returns: + A class that represents the input protocol message of the specified + method. + """ + if method_descriptor.containing_service != self.descriptor: + raise RuntimeError( + 'GetRequestClass() given method descriptor for wrong service type.') + return method_descriptor.input_type._concrete_class + + def _GetResponseClass(self, method_descriptor): + """Returns the class of the response protocol message. + + Args: + method_descriptor: Descriptor of the method for which to return the + response protocol message class. + + Returns: + A class that represents the output protocol message of the specified + method. + """ + if method_descriptor.containing_service != self.descriptor: + raise RuntimeError( + 'GetResponseClass() given method descriptor for wrong service type.') + return method_descriptor.output_type._concrete_class + + def _GenerateNonImplementedMethod(self, method): + """Generates and returns a method that can be set for a service methods. + + Args: + method: Descriptor of the service method for which a method is to be + generated. + + Returns: + A method that can be added to the service class. + """ + return lambda inst, rpc_controller, request, callback: ( + self._NonImplementedMethod(method.name, rpc_controller, callback)) + + def _NonImplementedMethod(self, method_name, rpc_controller, callback): + """The body of all methods in the generated service class. + + Args: + method_name: Name of the method being executed. + rpc_controller: RPC controller used to execute this method. + callback: A callback which will be invoked when the method finishes. + """ + rpc_controller.SetFailed('Method %s not implemented.' % method_name) + callback(None) + + +class _ServiceStubBuilder(object): + + """Constructs a protocol service stub class using a service descriptor. + + Given a service descriptor, this class constructs a suitable stub class. + A stub is just a type-safe wrapper around an RpcChannel which emulates a + local implementation of the service. + + One service stub builder instance constructs exactly one class. It means all + instances of that class share the same service stub builder. + """ + + def __init__(self, service_descriptor): + """Initializes an instance of the service stub class builder. + + Args: + service_descriptor: ServiceDescriptor to use when constructing the + stub class. + """ + self.descriptor = service_descriptor + + def BuildServiceStub(self, cls): + """Constructs the stub class. + + Args: + cls: The class that will be constructed. + """ + + def _ServiceStubInit(stub, rpc_channel): + stub.rpc_channel = rpc_channel + self.cls = cls + cls.__init__ = _ServiceStubInit + for method in self.descriptor.methods: + setattr(cls, method.name, self._GenerateStubMethod(method)) + + def _GenerateStubMethod(self, method): + return (lambda inst, rpc_controller, request, callback=None: + self._StubMethod(inst, method, rpc_controller, request, callback)) + + def _StubMethod(self, stub, method_descriptor, + rpc_controller, request, callback): + """The body of all service methods in the generated stub class. + + Args: + stub: Stub instance. + method_descriptor: Descriptor of the invoked method. + rpc_controller: Rpc controller to execute the method. + request: Request protocol message. + callback: A callback to execute when the method finishes. + Returns: + Response message (in case of blocking call). + """ + return stub.rpc_channel.CallMethod( + method_descriptor, rpc_controller, request, + method_descriptor.output_type._concrete_class, callback) diff --git a/code/push/google/protobuf/text_format.py b/code/push/google/protobuf/text_format.py new file mode 100644 index 0000000..3260d09 --- /dev/null +++ b/code/push/google/protobuf/text_format.py @@ -0,0 +1,739 @@ +# Protocol Buffers - Google's data interchange format +# Copyright 2008 Google Inc. All rights reserved. +# http://code.google.com/p/protobuf/ +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions are +# met: +# +# * Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# * Redistributions in binary form must reproduce the above +# copyright notice, this list of conditions and the following disclaimer +# in the documentation and/or other materials provided with the +# distribution. +# * Neither the name of Google Inc. nor the names of its +# contributors may be used to endorse or promote products derived from +# this software without specific prior written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS +# "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT +# LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR +# A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +# OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT +# LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, +# DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY +# THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +# (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +"""Contains routines for printing protocol messages in text format.""" + +__author__ = 'kenton@google.com (Kenton Varda)' + +import cStringIO +import re + +from collections import deque +from push.google.protobuf.internal import type_checkers +from push.google.protobuf import descriptor + +__all__ = [ 'MessageToString', 'PrintMessage', 'PrintField', + 'PrintFieldValue', 'Merge' ] + + +_INTEGER_CHECKERS = (type_checkers.Uint32ValueChecker(), + type_checkers.Int32ValueChecker(), + type_checkers.Uint64ValueChecker(), + type_checkers.Int64ValueChecker()) +_FLOAT_INFINITY = re.compile('-?inf(?:inity)?f?', re.IGNORECASE) +_FLOAT_NAN = re.compile('nanf?', re.IGNORECASE) + + +class ParseError(Exception): + """Thrown in case of ASCII parsing error.""" + + +def MessageToString(message, as_utf8=False, as_one_line=False): + out = cStringIO.StringIO() + PrintMessage(message, out, as_utf8=as_utf8, as_one_line=as_one_line) + result = out.getvalue() + out.close() + if as_one_line: + return result.rstrip() + return result + + +def PrintMessage(message, out, indent=0, as_utf8=False, as_one_line=False): + for field, value in message.ListFields(): + if field.label == descriptor.FieldDescriptor.LABEL_REPEATED: + for element in value: + PrintField(field, element, out, indent, as_utf8, as_one_line) + else: + PrintField(field, value, out, indent, as_utf8, as_one_line) + + +def PrintField(field, value, out, indent=0, as_utf8=False, as_one_line=False): + """Print a single field name/value pair. For repeated fields, the value + should be a single element.""" + + out.write(' ' * indent); + if field.is_extension: + out.write('[') + if (field.containing_type.GetOptions().message_set_wire_format and + field.type == descriptor.FieldDescriptor.TYPE_MESSAGE and + field.message_type == field.extension_scope and + field.label == descriptor.FieldDescriptor.LABEL_OPTIONAL): + out.write(field.message_type.full_name) + else: + out.write(field.full_name) + out.write(']') + elif field.type == descriptor.FieldDescriptor.TYPE_GROUP: + # For groups, use the capitalized name. + out.write(field.message_type.name) + else: + out.write(field.name) + + if field.cpp_type != descriptor.FieldDescriptor.CPPTYPE_MESSAGE: + # The colon is optional in this case, but our cross-language golden files + # don't include it. + out.write(': ') + + PrintFieldValue(field, value, out, indent, as_utf8, as_one_line) + if as_one_line: + out.write(' ') + else: + out.write('\n') + + +def PrintFieldValue(field, value, out, indent=0, + as_utf8=False, as_one_line=False): + """Print a single field value (not including name). For repeated fields, + the value should be a single element.""" + + if field.cpp_type == descriptor.FieldDescriptor.CPPTYPE_MESSAGE: + if as_one_line: + out.write(' { ') + PrintMessage(value, out, indent, as_utf8, as_one_line) + out.write('}') + else: + out.write(' {\n') + PrintMessage(value, out, indent + 2, as_utf8, as_one_line) + out.write(' ' * indent + '}') + elif field.cpp_type == descriptor.FieldDescriptor.CPPTYPE_ENUM: + enum_value = field.enum_type.values_by_number.get(value, None) + if enum_value is not None: + out.write(enum_value.name) + else: + out.write(str(value)) + elif field.cpp_type == descriptor.FieldDescriptor.CPPTYPE_STRING: + out.write('\"') + if type(value) is unicode: + out.write(_CEscape(value.encode('utf-8'), as_utf8)) + else: + out.write(_CEscape(value, as_utf8)) + out.write('\"') + elif field.cpp_type == descriptor.FieldDescriptor.CPPTYPE_BOOL: + if value: + out.write("true") + else: + out.write("false") + else: + out.write(str(value)) + + +def Merge(text, message): + """Merges an ASCII representation of a protocol message into a message. + + Args: + text: Message ASCII representation. + message: A protocol buffer message to merge into. + + Raises: + ParseError: On ASCII parsing problems. + """ + tokenizer = _Tokenizer(text) + while not tokenizer.AtEnd(): + _MergeField(tokenizer, message) + + +def _MergeField(tokenizer, message): + """Merges a single protocol message field into a message. + + Args: + tokenizer: A tokenizer to parse the field name and values. + message: A protocol message to record the data. + + Raises: + ParseError: In case of ASCII parsing problems. + """ + message_descriptor = message.DESCRIPTOR + if tokenizer.TryConsume('['): + name = [tokenizer.ConsumeIdentifier()] + while tokenizer.TryConsume('.'): + name.append(tokenizer.ConsumeIdentifier()) + name = '.'.join(name) + + if not message_descriptor.is_extendable: + raise tokenizer.ParseErrorPreviousToken( + 'Message type "%s" does not have extensions.' % + message_descriptor.full_name) + field = message.Extensions._FindExtensionByName(name) + if not field: + raise tokenizer.ParseErrorPreviousToken( + 'Extension "%s" not registered.' % name) + elif message_descriptor != field.containing_type: + raise tokenizer.ParseErrorPreviousToken( + 'Extension "%s" does not extend message type "%s".' % ( + name, message_descriptor.full_name)) + tokenizer.Consume(']') + else: + name = tokenizer.ConsumeIdentifier() + field = message_descriptor.fields_by_name.get(name, None) + + # Group names are expected to be capitalized as they appear in the + # .proto file, which actually matches their type names, not their field + # names. + if not field: + field = message_descriptor.fields_by_name.get(name.lower(), None) + if field and field.type != descriptor.FieldDescriptor.TYPE_GROUP: + field = None + + if (field and field.type == descriptor.FieldDescriptor.TYPE_GROUP and + field.message_type.name != name): + field = None + + if not field: + raise tokenizer.ParseErrorPreviousToken( + 'Message type "%s" has no field named "%s".' % ( + message_descriptor.full_name, name)) + + if field.cpp_type == descriptor.FieldDescriptor.CPPTYPE_MESSAGE: + tokenizer.TryConsume(':') + + if tokenizer.TryConsume('<'): + end_token = '>' + else: + tokenizer.Consume('{') + end_token = '}' + + if field.label == descriptor.FieldDescriptor.LABEL_REPEATED: + if field.is_extension: + sub_message = message.Extensions[field].add() + else: + sub_message = getattr(message, field.name).add() + else: + if field.is_extension: + sub_message = message.Extensions[field] + else: + sub_message = getattr(message, field.name) + sub_message.SetInParent() + + while not tokenizer.TryConsume(end_token): + if tokenizer.AtEnd(): + raise tokenizer.ParseErrorPreviousToken('Expected "%s".' % (end_token)) + _MergeField(tokenizer, sub_message) + else: + _MergeScalarField(tokenizer, message, field) + + +def _MergeScalarField(tokenizer, message, field): + """Merges a single protocol message scalar field into a message. + + Args: + tokenizer: A tokenizer to parse the field value. + message: A protocol message to record the data. + field: The descriptor of the field to be merged. + + Raises: + ParseError: In case of ASCII parsing problems. + RuntimeError: On runtime errors. + """ + tokenizer.Consume(':') + value = None + + if field.type in (descriptor.FieldDescriptor.TYPE_INT32, + descriptor.FieldDescriptor.TYPE_SINT32, + descriptor.FieldDescriptor.TYPE_SFIXED32): + value = tokenizer.ConsumeInt32() + elif field.type in (descriptor.FieldDescriptor.TYPE_INT64, + descriptor.FieldDescriptor.TYPE_SINT64, + descriptor.FieldDescriptor.TYPE_SFIXED64): + value = tokenizer.ConsumeInt64() + elif field.type in (descriptor.FieldDescriptor.TYPE_UINT32, + descriptor.FieldDescriptor.TYPE_FIXED32): + value = tokenizer.ConsumeUint32() + elif field.type in (descriptor.FieldDescriptor.TYPE_UINT64, + descriptor.FieldDescriptor.TYPE_FIXED64): + value = tokenizer.ConsumeUint64() + elif field.type in (descriptor.FieldDescriptor.TYPE_FLOAT, + descriptor.FieldDescriptor.TYPE_DOUBLE): + value = tokenizer.ConsumeFloat() + elif field.type == descriptor.FieldDescriptor.TYPE_BOOL: + value = tokenizer.ConsumeBool() + elif field.type == descriptor.FieldDescriptor.TYPE_STRING: + value = tokenizer.ConsumeString() + elif field.type == descriptor.FieldDescriptor.TYPE_BYTES: + value = tokenizer.ConsumeByteString() + elif field.type == descriptor.FieldDescriptor.TYPE_ENUM: + value = tokenizer.ConsumeEnum(field) + else: + raise RuntimeError('Unknown field type %d' % field.type) + + if field.label == descriptor.FieldDescriptor.LABEL_REPEATED: + if field.is_extension: + message.Extensions[field].append(value) + else: + getattr(message, field.name).append(value) + else: + if field.is_extension: + message.Extensions[field] = value + else: + setattr(message, field.name, value) + + +class _Tokenizer(object): + """Protocol buffer ASCII representation tokenizer. + + This class handles the lower level string parsing by splitting it into + meaningful tokens. + + It was directly ported from the Java protocol buffer API. + """ + + _WHITESPACE = re.compile('(\\s|(#.*$))+', re.MULTILINE) + _TOKEN = re.compile( + '[a-zA-Z_][0-9a-zA-Z_+-]*|' # an identifier + '[0-9+-][0-9a-zA-Z_.+-]*|' # a number + '\"([^\"\n\\\\]|\\\\.)*(\"|\\\\?$)|' # a double-quoted string + '\'([^\'\n\\\\]|\\\\.)*(\'|\\\\?$)') # a single-quoted string + _IDENTIFIER = re.compile('\w+') + + def __init__(self, text_message): + self._text_message = text_message + + self._position = 0 + self._line = -1 + self._column = 0 + self._token_start = None + self.token = '' + self._lines = deque(text_message.split('\n')) + self._current_line = '' + self._previous_line = 0 + self._previous_column = 0 + self._SkipWhitespace() + self.NextToken() + + def AtEnd(self): + """Checks the end of the text was reached. + + Returns: + True iff the end was reached. + """ + return self.token == '' + + def _PopLine(self): + while len(self._current_line) <= self._column: + if not self._lines: + self._current_line = '' + return + self._line += 1 + self._column = 0 + self._current_line = self._lines.popleft() + + def _SkipWhitespace(self): + while True: + self._PopLine() + match = self._WHITESPACE.match(self._current_line, self._column) + if not match: + break + length = len(match.group(0)) + self._column += length + + def TryConsume(self, token): + """Tries to consume a given piece of text. + + Args: + token: Text to consume. + + Returns: + True iff the text was consumed. + """ + if self.token == token: + self.NextToken() + return True + return False + + def Consume(self, token): + """Consumes a piece of text. + + Args: + token: Text to consume. + + Raises: + ParseError: If the text couldn't be consumed. + """ + if not self.TryConsume(token): + raise self._ParseError('Expected "%s".' % token) + + def ConsumeIdentifier(self): + """Consumes protocol message field identifier. + + Returns: + Identifier string. + + Raises: + ParseError: If an identifier couldn't be consumed. + """ + result = self.token + if not self._IDENTIFIER.match(result): + raise self._ParseError('Expected identifier.') + self.NextToken() + return result + + def ConsumeInt32(self): + """Consumes a signed 32bit integer number. + + Returns: + The integer parsed. + + Raises: + ParseError: If a signed 32bit integer couldn't be consumed. + """ + try: + result = ParseInteger(self.token, is_signed=True, is_long=False) + except ValueError, e: + raise self._ParseError(str(e)) + self.NextToken() + return result + + def ConsumeUint32(self): + """Consumes an unsigned 32bit integer number. + + Returns: + The integer parsed. + + Raises: + ParseError: If an unsigned 32bit integer couldn't be consumed. + """ + try: + result = ParseInteger(self.token, is_signed=False, is_long=False) + except ValueError, e: + raise self._ParseError(str(e)) + self.NextToken() + return result + + def ConsumeInt64(self): + """Consumes a signed 64bit integer number. + + Returns: + The integer parsed. + + Raises: + ParseError: If a signed 64bit integer couldn't be consumed. + """ + try: + result = ParseInteger(self.token, is_signed=True, is_long=True) + except ValueError, e: + raise self._ParseError(str(e)) + self.NextToken() + return result + + def ConsumeUint64(self): + """Consumes an unsigned 64bit integer number. + + Returns: + The integer parsed. + + Raises: + ParseError: If an unsigned 64bit integer couldn't be consumed. + """ + try: + result = ParseInteger(self.token, is_signed=False, is_long=True) + except ValueError, e: + raise self._ParseError(str(e)) + self.NextToken() + return result + + def ConsumeFloat(self): + """Consumes an floating point number. + + Returns: + The number parsed. + + Raises: + ParseError: If a floating point number couldn't be consumed. + """ + try: + result = ParseFloat(self.token) + except ValueError, e: + raise self._ParseError(str(e)) + self.NextToken() + return result + + def ConsumeBool(self): + """Consumes a boolean value. + + Returns: + The bool parsed. + + Raises: + ParseError: If a boolean value couldn't be consumed. + """ + try: + result = ParseBool(self.token) + except ValueError, e: + raise self._ParseError(str(e)) + self.NextToken() + return result + + def ConsumeString(self): + """Consumes a string value. + + Returns: + The string parsed. + + Raises: + ParseError: If a string value couldn't be consumed. + """ + bytes = self.ConsumeByteString() + try: + return unicode(bytes, 'utf-8') + except UnicodeDecodeError, e: + raise self._StringParseError(e) + + def ConsumeByteString(self): + """Consumes a byte array value. + + Returns: + The array parsed (as a string). + + Raises: + ParseError: If a byte array value couldn't be consumed. + """ + list = [self._ConsumeSingleByteString()] + while len(self.token) > 0 and self.token[0] in ('\'', '"'): + list.append(self._ConsumeSingleByteString()) + return "".join(list) + + def _ConsumeSingleByteString(self): + """Consume one token of a string literal. + + String literals (whether bytes or text) can come in multiple adjacent + tokens which are automatically concatenated, like in C or Python. This + method only consumes one token. + """ + text = self.token + if len(text) < 1 or text[0] not in ('\'', '"'): + raise self._ParseError('Expected string.') + + if len(text) < 2 or text[-1] != text[0]: + raise self._ParseError('String missing ending quote.') + + try: + result = _CUnescape(text[1:-1]) + except ValueError, e: + raise self._ParseError(str(e)) + self.NextToken() + return result + + def ConsumeEnum(self, field): + try: + result = ParseEnum(field, self.token) + except ValueError, e: + raise self._ParseError(str(e)) + self.NextToken() + return result + + def ParseErrorPreviousToken(self, message): + """Creates and *returns* a ParseError for the previously read token. + + Args: + message: A message to set for the exception. + + Returns: + A ParseError instance. + """ + return ParseError('%d:%d : %s' % ( + self._previous_line + 1, self._previous_column + 1, message)) + + def _ParseError(self, message): + """Creates and *returns* a ParseError for the current token.""" + return ParseError('%d:%d : %s' % ( + self._line + 1, self._column + 1, message)) + + def _StringParseError(self, e): + return self._ParseError('Couldn\'t parse string: ' + str(e)) + + def NextToken(self): + """Reads the next meaningful token.""" + self._previous_line = self._line + self._previous_column = self._column + + self._column += len(self.token) + self._SkipWhitespace() + + if not self._lines and len(self._current_line) <= self._column: + self.token = '' + return + + match = self._TOKEN.match(self._current_line, self._column) + if match: + token = match.group(0) + self.token = token + else: + self.token = self._current_line[self._column] + + +# text.encode('string_escape') does not seem to satisfy our needs as it +# encodes unprintable characters using two-digit hex escapes whereas our +# C++ unescaping function allows hex escapes to be any length. So, +# "\0011".encode('string_escape') ends up being "\\x011", which will be +# decoded in C++ as a single-character string with char code 0x11. +def _CEscape(text, as_utf8): + def escape(c): + o = ord(c) + if o == 10: return r"\n" # optional escape + if o == 13: return r"\r" # optional escape + if o == 9: return r"\t" # optional escape + if o == 39: return r"\'" # optional escape + + if o == 34: return r'\"' # necessary escape + if o == 92: return r"\\" # necessary escape + + # necessary escapes + if not as_utf8 and (o >= 127 or o < 32): return "\\%03o" % o + return c + return "".join([escape(c) for c in text]) + + +_CUNESCAPE_HEX = re.compile(r'(\\+)x([0-9a-fA-F])(?![0-9a-fA-F])') + + +def _CUnescape(text): + def ReplaceHex(m): + # Only replace the match if the number of leading back slashes is odd. i.e. + # the slash itself is not escaped. + if len(m.group(1)) & 1: + return m.group(1) + 'x0' + m.group(2) + return m.group(0) + + # This is required because the 'string_escape' encoding doesn't + # allow single-digit hex escapes (like '\xf'). + result = _CUNESCAPE_HEX.sub(ReplaceHex, text) + return result.decode('string_escape') + + +def ParseInteger(text, is_signed=False, is_long=False): + """Parses an integer. + + Args: + text: The text to parse. + is_signed: True if a signed integer must be parsed. + is_long: True if a long integer must be parsed. + + Returns: + The integer value. + + Raises: + ValueError: Thrown Iff the text is not a valid integer. + """ + # Do the actual parsing. Exception handling is propagated to caller. + try: + result = int(text, 0) + except ValueError: + raise ValueError('Couldn\'t parse integer: %s' % text) + + # Check if the integer is sane. Exceptions handled by callers. + checker = _INTEGER_CHECKERS[2 * int(is_long) + int(is_signed)] + checker.CheckValue(result) + return result + + +def ParseFloat(text): + """Parse a floating point number. + + Args: + text: Text to parse. + + Returns: + The number parsed. + + Raises: + ValueError: If a floating point number couldn't be parsed. + """ + try: + # Assume Python compatible syntax. + return float(text) + except ValueError: + # Check alternative spellings. + if _FLOAT_INFINITY.match(text): + if text[0] == '-': + return float('-inf') + else: + return float('inf') + elif _FLOAT_NAN.match(text): + return float('nan') + else: + # assume '1.0f' format + try: + return float(text.rstrip('f')) + except ValueError: + raise ValueError('Couldn\'t parse float: %s' % text) + + +def ParseBool(text): + """Parse a boolean value. + + Args: + text: Text to parse. + + Returns: + Boolean values parsed + + Raises: + ValueError: If text is not a valid boolean. + """ + if text in ('true', 't', '1'): + return True + elif text in ('false', 'f', '0'): + return False + else: + raise ValueError('Expected "true" or "false".') + + +def ParseEnum(field, value): + """Parse an enum value. + + The value can be specified by a number (the enum value), or by + a string literal (the enum name). + + Args: + field: Enum field descriptor. + value: String value. + + Returns: + Enum value number. + + Raises: + ValueError: If the enum value could not be parsed. + """ + enum_descriptor = field.enum_type + try: + number = int(value, 0) + except ValueError: + # Identifier. + enum_value = enum_descriptor.values_by_name.get(value, None) + if enum_value is None: + raise ValueError( + 'Enum type "%s" has no value named %s.' % ( + enum_descriptor.full_name, value)) + else: + # Numeric value. + enum_value = enum_descriptor.values_by_number.get(number, None) + if enum_value is None: + raise ValueError( + 'Enum type "%s" has no value with number %d.' % ( + enum_descriptor.full_name, number)) + return enum_value.number diff --git a/code/push/google/protobuf/unittest_custom_options_pb2.py b/code/push/google/protobuf/unittest_custom_options_pb2.py new file mode 100644 index 0000000..7386e39 --- /dev/null +++ b/code/push/google/protobuf/unittest_custom_options_pb2.py @@ -0,0 +1,1486 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/protobuf/unittest_custom_options.proto + +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import service as _service +from google.protobuf import service_reflection +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + + +import google.protobuf.descriptor_pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/protobuf/unittest_custom_options.proto', + package='protobuf_unittest', + serialized_pb='\n-google/protobuf/unittest_custom_options.proto\x12\x11protobuf_unittest\x1a google/protobuf/descriptor.proto\"\x8d\x01\n\x1cTestMessageWithCustomOptions\x12\x1e\n\x06\x66ield1\x18\x01 \x01(\tB\x0e\x08\x01\xc1\xe0\xc3\x1d-\xe1u\n\x02\x00\x00\x00\";\n\x06\x41nEnum\x12\x0f\n\x0b\x41NENUM_VAL1\x10\x01\x12\x16\n\x0b\x41NENUM_VAL2\x10\x02\x1a\x05\xb0\x86\xfa\x05{\x1a\x08\xc5\xf6\xc9\x1d\xeb\xfc\xff\xff:\x10\x08\x00\xe0\xe9\xc2\x1d\xc8\xff\xff\xff\xff\xff\xff\xff\xff\x01\"\x18\n\x16\x43ustomOptionFooRequest\"\x19\n\x17\x43ustomOptionFooResponse\"\x1e\n\x1c\x43ustomOptionFooClientMessage\"\x1e\n\x1c\x43ustomOptionFooServerMessage\"m\n\x1a\x44ummyMessageContainingEnum\"O\n\x0cTestEnumType\x12\x1a\n\x16TEST_OPTION_ENUM_TYPE1\x10\x16\x12#\n\x16TEST_OPTION_ENUM_TYPE2\x10\xe9\xff\xff\xff\xff\xff\xff\xff\xff\x01\"!\n\x1f\x44ummyMessageInvalidAsOptionType\"\x8a\x01\n\x1c\x43ustomOptionMinIntegerValues:j\xd0\xde\xb2\x1d\x00\xe8\xc6\xb2\x1d\x80\x80\x80\x80\xf8\xff\xff\xff\xff\x01\xb0\xbc\xb2\x1d\x80\x80\x80\x80\x80\x80\x80\x80\x80\x01\x80\x93\xb2\x1d\x00\xf8\xf5\xb0\x1d\x00\x80\xc4\xb0\x1d\xff\xff\xff\xff\x0f\xf8\x97\xb0\x1d\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x9d\xf5\xaf\x1d\x00\x00\x00\x00\x91\xee\xaf\x1d\x00\x00\x00\x00\x00\x00\x00\x00\xad\x8d\xaf\x1d\x00\x00\x00\x80\x99\xd6\xa8\x1d\x00\x00\x00\x00\x00\x00\x00\x80\"\x91\x01\n\x1c\x43ustomOptionMaxIntegerValues:q\xd0\xde\xb2\x1d\x01\xe8\xc6\xb2\x1d\xff\xff\xff\xff\x07\xb0\xbc\xb2\x1d\xff\xff\xff\xff\xff\xff\xff\xff\x7f\x80\x93\xb2\x1d\xff\xff\xff\xff\x0f\xf8\xf5\xb0\x1d\xff\xff\xff\xff\xff\xff\xff\xff\xff\x01\x80\xc4\xb0\x1d\xfe\xff\xff\xff\x0f\xf8\x97\xb0\x1d\xfe\xff\xff\xff\xff\xff\xff\xff\xff\x01\x9d\xf5\xaf\x1d\xff\xff\xff\xff\x91\xee\xaf\x1d\xff\xff\xff\xff\xff\xff\xff\xff\xad\x8d\xaf\x1d\xff\xff\xff\x7f\x99\xd6\xa8\x1d\xff\xff\xff\xff\xff\xff\xff\x7f\"n\n\x17\x43ustomOptionOtherValues:S\xe8\xc6\xb2\x1d\x9c\xff\xff\xff\xff\xff\xff\xff\xff\x01\xf5\xdf\xa3\x1d\xe7\x87\x45\x41\xe9\xdc\xa2\x1d\xfbY\x8c\x42\xca\xc0\xf3?\xaa\xdc\xa2\x1d\x0eHello, \"World\"\xb2\xd9\xa2\x1d\x0bHello\x00World\x88\xd9\xa2\x1d\xe9\xff\xff\xff\xff\xff\xff\xff\xff\x01\"4\n\x1cSettingRealsFromPositiveInts:\x14\xf5\xdf\xa3\x1d\x00\x00@A\xe9\xdc\xa2\x1d\x00\x00\x00\x00\x00@c@\"4\n\x1cSettingRealsFromNegativeInts:\x14\xf5\xdf\xa3\x1d\x00\x00@\xc1\xe9\xdc\xa2\x1d\x00\x00\x00\x00\x00@c\xc0\"G\n\x12\x43omplexOptionType1\x12\x0b\n\x03\x66oo\x18\x01 \x01(\x05\x12\x0c\n\x04\x66oo2\x18\x02 \x01(\x05\x12\x0c\n\x04\x66oo3\x18\x03 \x01(\x05*\x08\x08\x64\x10\x80\x80\x80\x80\x02\"\xc1\x02\n\x12\x43omplexOptionType2\x12\x32\n\x03\x62\x61r\x18\x01 \x01(\x0b\x32%.protobuf_unittest.ComplexOptionType1\x12\x0b\n\x03\x62\x61z\x18\x02 \x01(\x05\x12\x46\n\x04\x66red\x18\x03 \x01(\x0b\x32\x38.protobuf_unittest.ComplexOptionType2.ComplexOptionType4\x1a\x97\x01\n\x12\x43omplexOptionType4\x12\r\n\x05waldo\x18\x01 \x01(\x05\x32r\n\x0c\x63omplex_opt4\x12\x1f.google.protobuf.MessageOptions\x18\x8a\xf5\xd1\x03 \x01(\x0b\x32\x38.protobuf_unittest.ComplexOptionType2.ComplexOptionType4*\x08\x08\x64\x10\x80\x80\x80\x80\x02\"\x9c\x01\n\x12\x43omplexOptionType3\x12\x0b\n\x03qux\x18\x01 \x01(\x05\x12T\n\x12\x63omplexoptiontype5\x18\x02 \x01(\n28.protobuf_unittest.ComplexOptionType3.ComplexOptionType5\x1a#\n\x12\x43omplexOptionType5\x12\r\n\x05plugh\x18\x03 \x01(\x05\"\x1f\n\x0b\x43omplexOpt6\x12\x10\n\x05xyzzy\x18\xdf\xbf\xcf\x03 \x01(\x05\"\xd0\x01\n\x15VariousComplexOptions:\xb6\x01\xa2\xe2\x95\x1d\x02\x08*\xa2\xe2\x95\x1d\x06\xd8\x85\x9e\x1d\xc4\x02\xa2\xe2\x95\x1d\x08\x92\xf5\x9d\x1d\x03\x08\xec\x06\xaa\xfd\x90\x1d\x03\x10\xdb\x07\xaa\xfd\x90\x1d\x06\xf8\xe6\x97\x1d\x8e\x05\xaa\xfd\x90\x1d\x05\n\x03\x08\xe7\x05\xaa\xfd\x90\x1d\x08\n\x06\xd8\x85\x9e\x1d\xcf\x0f\xaa\xfd\x90\x1d\n\n\x08\x92\xf5\x9d\x1d\x03\x08\xd8\x0f\xaa\xfd\x90\x1d\x08\xc2\xac\x97\x1d\x03\x08\xe5\x05\xaa\xfd\x90\x1d\x0b\xc2\xac\x97\x1d\x06\xd8\x85\x9e\x1d\xce\x0f\xaa\xfd\x90\x1d\r\xc2\xac\x97\x1d\x08\x92\xf5\x9d\x1d\x03\x08\xc9\x10\xd2\xa8\x8f\x1d\x03\x08\xb3\x0f\xaa\xfd\x90\x1d\x05\x1a\x03\x08\xc1\x02\xfa\xde\x90\x1d\x02\x08\t\xfa\xde\x90\x1d\x04\x13\x18\x16\x14\xe3\xdc\xfc\x1c\xf8\xfd\xfb\x1c\x18\xe4\xdc\xfc\x1c\"#\n\x13\x41ggregateMessageSet*\x08\x08\x04\x10\xff\xff\xff\xff\x07:\x02\x08\x01\"\xa0\x01\n\x1a\x41ggregateMessageSetElement\x12\t\n\x01s\x18\x01 \x01(\t2w\n\x15message_set_extension\x12&.protobuf_unittest.AggregateMessageSet\x18\xf6\xeb\xae\x07 \x01(\x0b\x32-.protobuf_unittest.AggregateMessageSetElement\"\xfd\x01\n\tAggregate\x12\t\n\x01i\x18\x01 \x01(\x05\x12\t\n\x01s\x18\x02 \x01(\t\x12)\n\x03sub\x18\x03 \x01(\x0b\x32\x1c.protobuf_unittest.Aggregate\x12*\n\x04\x66ile\x18\x04 \x01(\x0b\x32\x1c.google.protobuf.FileOptions\x12\x34\n\x04mset\x18\x05 \x01(\x0b\x32&.protobuf_unittest.AggregateMessageSet2M\n\x06nested\x12\x1c.google.protobuf.FileOptions\x18\xa7\xd1\xb0\x07 \x01(\x0b\x32\x1c.protobuf_unittest.Aggregate\"Y\n\x10\x41ggregateMessage\x12)\n\tfieldname\x18\x01 \x01(\x05\x42\x16\xf2\xa1\x87;\x11\x12\x0f\x46ieldAnnotation:\x1a\xc2\xd1\x86;\x15\x08\x65\x12\x11MessageAnnotation\"\xc9\x01\n\x10NestedOptionType\x1a;\n\rNestedMessage\x12\"\n\x0cnested_field\x18\x01 \x01(\x05\x42\x0c\xc1\xe0\xc3\x1d\xea\x03\x00\x00\x00\x00\x00\x00:\x06\xe0\xe9\xc2\x1d\xe9\x07\"5\n\nNestedEnum\x12\x1d\n\x11NESTED_ENUM_VALUE\x10\x01\x1a\x06\xb0\x86\xfa\x05\xec\x07\x1a\x08\xc5\xf6\xc9\x1d\xeb\x03\x00\x00\x32\x41\n\x10nested_extension\x12\x1c.google.protobuf.FileOptions\x18\xfd\xf8\xe2\x03 \x01(\x05\x42\x06\xc8\x8b\xca\x1d\xed\x07*6\n\nMethodOpt1\x12\x13\n\x0fMETHODOPT1_VAL1\x10\x01\x12\x13\n\x0fMETHODOPT1_VAL2\x10\x02*M\n\rAggregateEnum\x12%\n\x05VALUE\x10\x01\x1a\x1a\xca\xfc\x89;\x15\x12\x13\x45numValueAnnotation\x1a\x15\x92\x95\x88;\x10\x12\x0e\x45numAnnotation2\x8e\x01\n\x1cTestServiceWithCustomOptions\x12\x63\n\x03\x46oo\x12).protobuf_unittest.CustomOptionFooRequest\x1a*.protobuf_unittest.CustomOptionFooResponse\"\x05\xe0\xfa\x8c\x1e\x02\x1a\t\x90\xb2\x8b\x1e\xd3\xdb\x80\xcbI2\x99\x01\n\x10\x41ggregateService\x12k\n\x06Method\x12#.protobuf_unittest.AggregateMessage\x1a#.protobuf_unittest.AggregateMessage\"\x17\xca\xc8\x96;\x12\x12\x10MethodAnnotation\x1a\x18\xca\xfb\x8e;\x13\x12\x11ServiceAnnotation:2\n\tfile_opt1\x12\x1c.google.protobuf.FileOptions\x18\x8e\x9d\xd8\x03 \x01(\x04:8\n\x0cmessage_opt1\x12\x1f.google.protobuf.MessageOptions\x18\x9c\xad\xd8\x03 \x01(\x05:4\n\nfield_opt1\x12\x1d.google.protobuf.FieldOptions\x18\x88\xbc\xd8\x03 \x01(\x06:8\n\nfield_opt2\x12\x1d.google.protobuf.FieldOptions\x18\xb9\xa1\xd9\x03 \x01(\x05:\x02\x34\x32:2\n\tenum_opt1\x12\x1c.google.protobuf.EnumOptions\x18\xe8\x9e\xd9\x03 \x01(\x0f:<\n\x0f\x65num_value_opt1\x12!.google.protobuf.EnumValueOptions\x18\xe6\xa0_ \x01(\x05:8\n\x0cservice_opt1\x12\x1f.google.protobuf.ServiceOptions\x18\xa2\xb6\xe1\x03 \x01(\x12:U\n\x0bmethod_opt1\x12\x1e.google.protobuf.MethodOptions\x18\xac\xcf\xe1\x03 \x01(\x0e\x32\x1d.protobuf_unittest.MethodOpt1:4\n\x08\x62ool_opt\x12\x1f.google.protobuf.MessageOptions\x18\xea\xab\xd6\x03 \x01(\x08:5\n\tint32_opt\x12\x1f.google.protobuf.MessageOptions\x18\xed\xa8\xd6\x03 \x01(\x05:5\n\tint64_opt\x12\x1f.google.protobuf.MessageOptions\x18\xc6\xa7\xd6\x03 \x01(\x03:6\n\nuint32_opt\x12\x1f.google.protobuf.MessageOptions\x18\xb0\xa2\xd6\x03 \x01(\r:6\n\nuint64_opt\x12\x1f.google.protobuf.MessageOptions\x18\xdf\x8e\xd6\x03 \x01(\x04:6\n\nsint32_opt\x12\x1f.google.protobuf.MessageOptions\x18\xc0\x88\xd6\x03 \x01(\x11:6\n\nsint64_opt\x12\x1f.google.protobuf.MessageOptions\x18\xff\x82\xd6\x03 \x01(\x12:7\n\x0b\x66ixed32_opt\x12\x1f.google.protobuf.MessageOptions\x18\xd3\xfe\xd5\x03 \x01(\x07:7\n\x0b\x66ixed64_opt\x12\x1f.google.protobuf.MessageOptions\x18\xe2\xfd\xd5\x03 \x01(\x06:8\n\x0csfixed32_opt\x12\x1f.google.protobuf.MessageOptions\x18\xd5\xf1\xd5\x03 \x01(\x0f:8\n\x0csfixed64_opt\x12\x1f.google.protobuf.MessageOptions\x18\xe3\x8a\xd5\x03 \x01(\x10:5\n\tfloat_opt\x12\x1f.google.protobuf.MessageOptions\x18\xfe\xbb\xd4\x03 \x01(\x02:6\n\ndouble_opt\x12\x1f.google.protobuf.MessageOptions\x18\xcd\xab\xd4\x03 \x01(\x01:6\n\nstring_opt\x12\x1f.google.protobuf.MessageOptions\x18\xc5\xab\xd4\x03 \x01(\t:5\n\tbytes_opt\x12\x1f.google.protobuf.MessageOptions\x18\x96\xab\xd4\x03 \x01(\x0c:p\n\x08\x65num_opt\x12\x1f.google.protobuf.MessageOptions\x18\x91\xab\xd4\x03 \x01(\x0e\x32:.protobuf_unittest.DummyMessageContainingEnum.TestEnumType:p\n\x10message_type_opt\x12\x1f.google.protobuf.MessageOptions\x18\xaf\xf2\xd3\x03 \x01(\x0b\x32\x32.protobuf_unittest.DummyMessageInvalidAsOptionType:6\n\x04quux\x12%.protobuf_unittest.ComplexOptionType1\x18\xdb\xe0\xd3\x03 \x01(\x05:^\n\x05\x63orge\x12%.protobuf_unittest.ComplexOptionType1\x18\xd2\xde\xd3\x03 \x01(\x0b\x32%.protobuf_unittest.ComplexOptionType3:8\n\x06grault\x12%.protobuf_unittest.ComplexOptionType2\x18\xef\xfc\xd2\x03 \x01(\x05:_\n\x06garply\x12%.protobuf_unittest.ComplexOptionType2\x18\xc8\xf5\xd2\x03 \x01(\x0b\x32%.protobuf_unittest.ComplexOptionType1:_\n\x0c\x63omplex_opt1\x12\x1f.google.protobuf.MessageOptions\x18\xa4\xdc\xd2\x03 \x01(\x0b\x32%.protobuf_unittest.ComplexOptionType1:_\n\x0c\x63omplex_opt2\x12\x1f.google.protobuf.MessageOptions\x18\xd5\x8f\xd2\x03 \x01(\x0b\x32%.protobuf_unittest.ComplexOptionType2:_\n\x0c\x63omplex_opt3\x12\x1f.google.protobuf.MessageOptions\x18\xef\x8b\xd2\x03 \x01(\x0b\x32%.protobuf_unittest.ComplexOptionType3:W\n\x0b\x63omplexopt6\x12\x1f.google.protobuf.MessageOptions\x18\xcc\xcb\xcf\x03 \x01(\n2\x1e.protobuf_unittest.ComplexOpt6:N\n\x07\x66ileopt\x12\x1c.google.protobuf.FileOptions\x18\xcf\xdd\xb0\x07 \x01(\x0b\x32\x1c.protobuf_unittest.Aggregate:P\n\x06msgopt\x12\x1f.google.protobuf.MessageOptions\x18\x98\xea\xb0\x07 \x01(\x0b\x32\x1c.protobuf_unittest.Aggregate:P\n\x08\x66ieldopt\x12\x1d.google.protobuf.FieldOptions\x18\x9e\xf4\xb0\x07 \x01(\x0b\x32\x1c.protobuf_unittest.Aggregate:N\n\x07\x65numopt\x12\x1c.google.protobuf.EnumOptions\x18\xd2\x82\xb1\x07 \x01(\x0b\x32\x1c.protobuf_unittest.Aggregate:V\n\nenumvalopt\x12!.google.protobuf.EnumValueOptions\x18\xc9\x9f\xb1\x07 \x01(\x0b\x32\x1c.protobuf_unittest.Aggregate:T\n\nserviceopt\x12\x1f.google.protobuf.ServiceOptions\x18\xb9\xef\xb1\x07 \x01(\x0b\x32\x1c.protobuf_unittest.Aggregate:R\n\tmethodopt\x12\x1e.google.protobuf.MethodOptions\x18\x89\xe9\xb2\x07 \x01(\x0b\x32\x1c.protobuf_unittest.AggregateB\x87\x01\x80\x01\x01\x88\x01\x01\x90\x01\x01\xf0\xe8\xc1\x1d\xea\xad\xc0\xe5$\xfa\xec\x85;p\x08\x64\x12\x0e\x46ileAnnotation\x1a\x16\x12\x14NestedFileAnnotation\"\x1e\xfa\xec\x85;\x19\x12\x17\x46ileExtensionAnnotation*$\x0b\x10\xf6\xeb\xae\x07\x1a\x1b\n\x19\x45mbeddedMessageSetElement\x0c') + +_METHODOPT1 = _descriptor.EnumDescriptor( + name='MethodOpt1', + full_name='protobuf_unittest.MethodOpt1', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='METHODOPT1_VAL1', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='METHODOPT1_VAL2', index=1, number=2, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=2569, + serialized_end=2623, +) + +MethodOpt1 = enum_type_wrapper.EnumTypeWrapper(_METHODOPT1) +_AGGREGATEENUM = _descriptor.EnumDescriptor( + name='AggregateEnum', + full_name='protobuf_unittest.AggregateEnum', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='VALUE', index=0, number=1, + options=_descriptor._ParseOptions(descriptor_pb2.EnumValueOptions(), '\312\374\211;\025\022\023EnumValueAnnotation'), + type=None), + ], + containing_type=None, + options=_descriptor._ParseOptions(descriptor_pb2.EnumOptions(), '\222\225\210;\020\022\016EnumAnnotation'), + serialized_start=2625, + serialized_end=2702, +) + +AggregateEnum = enum_type_wrapper.EnumTypeWrapper(_AGGREGATEENUM) +METHODOPT1_VAL1 = 1 +METHODOPT1_VAL2 = 2 +VALUE = 1 + +FILE_OPT1_FIELD_NUMBER = 7736974 +file_opt1 = _descriptor.FieldDescriptor( + name='file_opt1', full_name='protobuf_unittest.file_opt1', index=0, + number=7736974, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +MESSAGE_OPT1_FIELD_NUMBER = 7739036 +message_opt1 = _descriptor.FieldDescriptor( + name='message_opt1', full_name='protobuf_unittest.message_opt1', index=1, + number=7739036, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +FIELD_OPT1_FIELD_NUMBER = 7740936 +field_opt1 = _descriptor.FieldDescriptor( + name='field_opt1', full_name='protobuf_unittest.field_opt1', index=2, + number=7740936, type=6, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +FIELD_OPT2_FIELD_NUMBER = 7753913 +field_opt2 = _descriptor.FieldDescriptor( + name='field_opt2', full_name='protobuf_unittest.field_opt2', index=3, + number=7753913, type=5, cpp_type=1, label=1, + has_default_value=True, default_value=42, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +ENUM_OPT1_FIELD_NUMBER = 7753576 +enum_opt1 = _descriptor.FieldDescriptor( + name='enum_opt1', full_name='protobuf_unittest.enum_opt1', index=4, + number=7753576, type=15, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +ENUM_VALUE_OPT1_FIELD_NUMBER = 1560678 +enum_value_opt1 = _descriptor.FieldDescriptor( + name='enum_value_opt1', full_name='protobuf_unittest.enum_value_opt1', index=5, + number=1560678, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +SERVICE_OPT1_FIELD_NUMBER = 7887650 +service_opt1 = _descriptor.FieldDescriptor( + name='service_opt1', full_name='protobuf_unittest.service_opt1', index=6, + number=7887650, type=18, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +METHOD_OPT1_FIELD_NUMBER = 7890860 +method_opt1 = _descriptor.FieldDescriptor( + name='method_opt1', full_name='protobuf_unittest.method_opt1', index=7, + number=7890860, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +BOOL_OPT_FIELD_NUMBER = 7706090 +bool_opt = _descriptor.FieldDescriptor( + name='bool_opt', full_name='protobuf_unittest.bool_opt', index=8, + number=7706090, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +INT32_OPT_FIELD_NUMBER = 7705709 +int32_opt = _descriptor.FieldDescriptor( + name='int32_opt', full_name='protobuf_unittest.int32_opt', index=9, + number=7705709, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +INT64_OPT_FIELD_NUMBER = 7705542 +int64_opt = _descriptor.FieldDescriptor( + name='int64_opt', full_name='protobuf_unittest.int64_opt', index=10, + number=7705542, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +UINT32_OPT_FIELD_NUMBER = 7704880 +uint32_opt = _descriptor.FieldDescriptor( + name='uint32_opt', full_name='protobuf_unittest.uint32_opt', index=11, + number=7704880, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +UINT64_OPT_FIELD_NUMBER = 7702367 +uint64_opt = _descriptor.FieldDescriptor( + name='uint64_opt', full_name='protobuf_unittest.uint64_opt', index=12, + number=7702367, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +SINT32_OPT_FIELD_NUMBER = 7701568 +sint32_opt = _descriptor.FieldDescriptor( + name='sint32_opt', full_name='protobuf_unittest.sint32_opt', index=13, + number=7701568, type=17, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +SINT64_OPT_FIELD_NUMBER = 7700863 +sint64_opt = _descriptor.FieldDescriptor( + name='sint64_opt', full_name='protobuf_unittest.sint64_opt', index=14, + number=7700863, type=18, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +FIXED32_OPT_FIELD_NUMBER = 7700307 +fixed32_opt = _descriptor.FieldDescriptor( + name='fixed32_opt', full_name='protobuf_unittest.fixed32_opt', index=15, + number=7700307, type=7, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +FIXED64_OPT_FIELD_NUMBER = 7700194 +fixed64_opt = _descriptor.FieldDescriptor( + name='fixed64_opt', full_name='protobuf_unittest.fixed64_opt', index=16, + number=7700194, type=6, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +SFIXED32_OPT_FIELD_NUMBER = 7698645 +sfixed32_opt = _descriptor.FieldDescriptor( + name='sfixed32_opt', full_name='protobuf_unittest.sfixed32_opt', index=17, + number=7698645, type=15, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +SFIXED64_OPT_FIELD_NUMBER = 7685475 +sfixed64_opt = _descriptor.FieldDescriptor( + name='sfixed64_opt', full_name='protobuf_unittest.sfixed64_opt', index=18, + number=7685475, type=16, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +FLOAT_OPT_FIELD_NUMBER = 7675390 +float_opt = _descriptor.FieldDescriptor( + name='float_opt', full_name='protobuf_unittest.float_opt', index=19, + number=7675390, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DOUBLE_OPT_FIELD_NUMBER = 7673293 +double_opt = _descriptor.FieldDescriptor( + name='double_opt', full_name='protobuf_unittest.double_opt', index=20, + number=7673293, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +STRING_OPT_FIELD_NUMBER = 7673285 +string_opt = _descriptor.FieldDescriptor( + name='string_opt', full_name='protobuf_unittest.string_opt', index=21, + number=7673285, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +BYTES_OPT_FIELD_NUMBER = 7673238 +bytes_opt = _descriptor.FieldDescriptor( + name='bytes_opt', full_name='protobuf_unittest.bytes_opt', index=22, + number=7673238, type=12, cpp_type=9, label=1, + has_default_value=False, default_value="", + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +ENUM_OPT_FIELD_NUMBER = 7673233 +enum_opt = _descriptor.FieldDescriptor( + name='enum_opt', full_name='protobuf_unittest.enum_opt', index=23, + number=7673233, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=22, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +MESSAGE_TYPE_OPT_FIELD_NUMBER = 7665967 +message_type_opt = _descriptor.FieldDescriptor( + name='message_type_opt', full_name='protobuf_unittest.message_type_opt', index=24, + number=7665967, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +QUUX_FIELD_NUMBER = 7663707 +quux = _descriptor.FieldDescriptor( + name='quux', full_name='protobuf_unittest.quux', index=25, + number=7663707, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +CORGE_FIELD_NUMBER = 7663442 +corge = _descriptor.FieldDescriptor( + name='corge', full_name='protobuf_unittest.corge', index=26, + number=7663442, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +GRAULT_FIELD_NUMBER = 7650927 +grault = _descriptor.FieldDescriptor( + name='grault', full_name='protobuf_unittest.grault', index=27, + number=7650927, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +GARPLY_FIELD_NUMBER = 7649992 +garply = _descriptor.FieldDescriptor( + name='garply', full_name='protobuf_unittest.garply', index=28, + number=7649992, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +COMPLEX_OPT1_FIELD_NUMBER = 7646756 +complex_opt1 = _descriptor.FieldDescriptor( + name='complex_opt1', full_name='protobuf_unittest.complex_opt1', index=29, + number=7646756, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +COMPLEX_OPT2_FIELD_NUMBER = 7636949 +complex_opt2 = _descriptor.FieldDescriptor( + name='complex_opt2', full_name='protobuf_unittest.complex_opt2', index=30, + number=7636949, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +COMPLEX_OPT3_FIELD_NUMBER = 7636463 +complex_opt3 = _descriptor.FieldDescriptor( + name='complex_opt3', full_name='protobuf_unittest.complex_opt3', index=31, + number=7636463, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +COMPLEXOPT6_FIELD_NUMBER = 7595468 +complexopt6 = _descriptor.FieldDescriptor( + name='complexopt6', full_name='protobuf_unittest.complexopt6', index=32, + number=7595468, type=10, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +FILEOPT_FIELD_NUMBER = 15478479 +fileopt = _descriptor.FieldDescriptor( + name='fileopt', full_name='protobuf_unittest.fileopt', index=33, + number=15478479, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +MSGOPT_FIELD_NUMBER = 15480088 +msgopt = _descriptor.FieldDescriptor( + name='msgopt', full_name='protobuf_unittest.msgopt', index=34, + number=15480088, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +FIELDOPT_FIELD_NUMBER = 15481374 +fieldopt = _descriptor.FieldDescriptor( + name='fieldopt', full_name='protobuf_unittest.fieldopt', index=35, + number=15481374, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +ENUMOPT_FIELD_NUMBER = 15483218 +enumopt = _descriptor.FieldDescriptor( + name='enumopt', full_name='protobuf_unittest.enumopt', index=36, + number=15483218, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +ENUMVALOPT_FIELD_NUMBER = 15486921 +enumvalopt = _descriptor.FieldDescriptor( + name='enumvalopt', full_name='protobuf_unittest.enumvalopt', index=37, + number=15486921, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +SERVICEOPT_FIELD_NUMBER = 15497145 +serviceopt = _descriptor.FieldDescriptor( + name='serviceopt', full_name='protobuf_unittest.serviceopt', index=38, + number=15497145, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +METHODOPT_FIELD_NUMBER = 15512713 +methodopt = _descriptor.FieldDescriptor( + name='methodopt', full_name='protobuf_unittest.methodopt', index=39, + number=15512713, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) + +_TESTMESSAGEWITHCUSTOMOPTIONS_ANENUM = _descriptor.EnumDescriptor( + name='AnEnum', + full_name='protobuf_unittest.TestMessageWithCustomOptions.AnEnum', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='ANENUM_VAL1', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='ANENUM_VAL2', index=1, number=2, + options=_descriptor._ParseOptions(descriptor_pb2.EnumValueOptions(), '\260\206\372\005{'), + type=None), + ], + containing_type=None, + options=_descriptor._ParseOptions(descriptor_pb2.EnumOptions(), '\305\366\311\035\353\374\377\377'), + serialized_start=167, + serialized_end=226, +) + +_DUMMYMESSAGECONTAININGENUM_TESTENUMTYPE = _descriptor.EnumDescriptor( + name='TestEnumType', + full_name='protobuf_unittest.DummyMessageContainingEnum.TestEnumType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='TEST_OPTION_ENUM_TYPE1', index=0, number=22, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='TEST_OPTION_ENUM_TYPE2', index=1, number=-23, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=393, + serialized_end=472, +) + +_NESTEDOPTIONTYPE_NESTEDENUM = _descriptor.EnumDescriptor( + name='NestedEnum', + full_name='protobuf_unittest.NestedOptionType.NestedEnum', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='NESTED_ENUM_VALUE', index=0, number=1, + options=_descriptor._ParseOptions(descriptor_pb2.EnumValueOptions(), '\260\206\372\005\354\007'), + type=None), + ], + containing_type=None, + options=_descriptor._ParseOptions(descriptor_pb2.EnumOptions(), '\305\366\311\035\353\003\000\000'), + serialized_start=2447, + serialized_end=2500, +) + + +_TESTMESSAGEWITHCUSTOMOPTIONS = _descriptor.Descriptor( + name='TestMessageWithCustomOptions', + full_name='protobuf_unittest.TestMessageWithCustomOptions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='field1', full_name='protobuf_unittest.TestMessageWithCustomOptions.field1', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001\301\340\303\035-\341u\n\002\000\000\000')), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _TESTMESSAGEWITHCUSTOMOPTIONS_ANENUM, + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\010\000\340\351\302\035\310\377\377\377\377\377\377\377\377\001'), + is_extendable=False, + extension_ranges=[], + serialized_start=103, + serialized_end=244, +) + + +_CUSTOMOPTIONFOOREQUEST = _descriptor.Descriptor( + name='CustomOptionFooRequest', + full_name='protobuf_unittest.CustomOptionFooRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=246, + serialized_end=270, +) + + +_CUSTOMOPTIONFOORESPONSE = _descriptor.Descriptor( + name='CustomOptionFooResponse', + full_name='protobuf_unittest.CustomOptionFooResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=272, + serialized_end=297, +) + + +_CUSTOMOPTIONFOOCLIENTMESSAGE = _descriptor.Descriptor( + name='CustomOptionFooClientMessage', + full_name='protobuf_unittest.CustomOptionFooClientMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=299, + serialized_end=329, +) + + +_CUSTOMOPTIONFOOSERVERMESSAGE = _descriptor.Descriptor( + name='CustomOptionFooServerMessage', + full_name='protobuf_unittest.CustomOptionFooServerMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=331, + serialized_end=361, +) + + +_DUMMYMESSAGECONTAININGENUM = _descriptor.Descriptor( + name='DummyMessageContainingEnum', + full_name='protobuf_unittest.DummyMessageContainingEnum', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _DUMMYMESSAGECONTAININGENUM_TESTENUMTYPE, + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=363, + serialized_end=472, +) + + +_DUMMYMESSAGEINVALIDASOPTIONTYPE = _descriptor.Descriptor( + name='DummyMessageInvalidAsOptionType', + full_name='protobuf_unittest.DummyMessageInvalidAsOptionType', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=474, + serialized_end=507, +) + + +_CUSTOMOPTIONMININTEGERVALUES = _descriptor.Descriptor( + name='CustomOptionMinIntegerValues', + full_name='protobuf_unittest.CustomOptionMinIntegerValues', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\320\336\262\035\000\350\306\262\035\200\200\200\200\370\377\377\377\377\001\260\274\262\035\200\200\200\200\200\200\200\200\200\001\200\223\262\035\000\370\365\260\035\000\200\304\260\035\377\377\377\377\017\370\227\260\035\377\377\377\377\377\377\377\377\377\001\235\365\257\035\000\000\000\000\221\356\257\035\000\000\000\000\000\000\000\000\255\215\257\035\000\000\000\200\231\326\250\035\000\000\000\000\000\000\000\200'), + is_extendable=False, + extension_ranges=[], + serialized_start=510, + serialized_end=648, +) + + +_CUSTOMOPTIONMAXINTEGERVALUES = _descriptor.Descriptor( + name='CustomOptionMaxIntegerValues', + full_name='protobuf_unittest.CustomOptionMaxIntegerValues', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\320\336\262\035\001\350\306\262\035\377\377\377\377\007\260\274\262\035\377\377\377\377\377\377\377\377\177\200\223\262\035\377\377\377\377\017\370\365\260\035\377\377\377\377\377\377\377\377\377\001\200\304\260\035\376\377\377\377\017\370\227\260\035\376\377\377\377\377\377\377\377\377\001\235\365\257\035\377\377\377\377\221\356\257\035\377\377\377\377\377\377\377\377\255\215\257\035\377\377\377\177\231\326\250\035\377\377\377\377\377\377\377\177'), + is_extendable=False, + extension_ranges=[], + serialized_start=651, + serialized_end=796, +) + + +_CUSTOMOPTIONOTHERVALUES = _descriptor.Descriptor( + name='CustomOptionOtherValues', + full_name='protobuf_unittest.CustomOptionOtherValues', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\350\306\262\035\234\377\377\377\377\377\377\377\377\001\365\337\243\035\347\207EA\351\334\242\035\373Y\214B\312\300\363?\252\334\242\035\016Hello, \"World\"\262\331\242\035\013Hello\000World\210\331\242\035\351\377\377\377\377\377\377\377\377\001'), + is_extendable=False, + extension_ranges=[], + serialized_start=798, + serialized_end=908, +) + + +_SETTINGREALSFROMPOSITIVEINTS = _descriptor.Descriptor( + name='SettingRealsFromPositiveInts', + full_name='protobuf_unittest.SettingRealsFromPositiveInts', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\365\337\243\035\000\000@A\351\334\242\035\000\000\000\000\000@c@'), + is_extendable=False, + extension_ranges=[], + serialized_start=910, + serialized_end=962, +) + + +_SETTINGREALSFROMNEGATIVEINTS = _descriptor.Descriptor( + name='SettingRealsFromNegativeInts', + full_name='protobuf_unittest.SettingRealsFromNegativeInts', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\365\337\243\035\000\000@\301\351\334\242\035\000\000\000\000\000@c\300'), + is_extendable=False, + extension_ranges=[], + serialized_start=964, + serialized_end=1016, +) + + +_COMPLEXOPTIONTYPE1 = _descriptor.Descriptor( + name='ComplexOptionType1', + full_name='protobuf_unittest.ComplexOptionType1', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='foo', full_name='protobuf_unittest.ComplexOptionType1.foo', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='foo2', full_name='protobuf_unittest.ComplexOptionType1.foo2', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='foo3', full_name='protobuf_unittest.ComplexOptionType1.foo3', index=2, + number=3, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(100, 536870912), ], + serialized_start=1018, + serialized_end=1089, +) + + +_COMPLEXOPTIONTYPE2_COMPLEXOPTIONTYPE4 = _descriptor.Descriptor( + name='ComplexOptionType4', + full_name='protobuf_unittest.ComplexOptionType2.ComplexOptionType4', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='waldo', full_name='protobuf_unittest.ComplexOptionType2.ComplexOptionType4.waldo', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + _descriptor.FieldDescriptor( + name='complex_opt4', full_name='protobuf_unittest.ComplexOptionType2.ComplexOptionType4.complex_opt4', index=0, + number=7633546, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None), + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1252, + serialized_end=1403, +) + +_COMPLEXOPTIONTYPE2 = _descriptor.Descriptor( + name='ComplexOptionType2', + full_name='protobuf_unittest.ComplexOptionType2', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='bar', full_name='protobuf_unittest.ComplexOptionType2.bar', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='baz', full_name='protobuf_unittest.ComplexOptionType2.baz', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='fred', full_name='protobuf_unittest.ComplexOptionType2.fred', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_COMPLEXOPTIONTYPE2_COMPLEXOPTIONTYPE4, ], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(100, 536870912), ], + serialized_start=1092, + serialized_end=1413, +) + + +_COMPLEXOPTIONTYPE3_COMPLEXOPTIONTYPE5 = _descriptor.Descriptor( + name='ComplexOptionType5', + full_name='protobuf_unittest.ComplexOptionType3.ComplexOptionType5', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='plugh', full_name='protobuf_unittest.ComplexOptionType3.ComplexOptionType5.plugh', index=0, + number=3, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1537, + serialized_end=1572, +) + +_COMPLEXOPTIONTYPE3 = _descriptor.Descriptor( + name='ComplexOptionType3', + full_name='protobuf_unittest.ComplexOptionType3', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='qux', full_name='protobuf_unittest.ComplexOptionType3.qux', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='complexoptiontype5', full_name='protobuf_unittest.ComplexOptionType3.complexoptiontype5', index=1, + number=2, type=10, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_COMPLEXOPTIONTYPE3_COMPLEXOPTIONTYPE5, ], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1416, + serialized_end=1572, +) + + +_COMPLEXOPT6 = _descriptor.Descriptor( + name='ComplexOpt6', + full_name='protobuf_unittest.ComplexOpt6', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='xyzzy', full_name='protobuf_unittest.ComplexOpt6.xyzzy', index=0, + number=7593951, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1574, + serialized_end=1605, +) + + +_VARIOUSCOMPLEXOPTIONS = _descriptor.Descriptor( + name='VariousComplexOptions', + full_name='protobuf_unittest.VariousComplexOptions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\242\342\225\035\002\010*\242\342\225\035\006\330\205\236\035\304\002\242\342\225\035\010\222\365\235\035\003\010\354\006\252\375\220\035\003\020\333\007\252\375\220\035\006\370\346\227\035\216\005\252\375\220\035\005\n\003\010\347\005\252\375\220\035\010\n\006\330\205\236\035\317\017\252\375\220\035\n\n\010\222\365\235\035\003\010\330\017\252\375\220\035\010\302\254\227\035\003\010\345\005\252\375\220\035\013\302\254\227\035\006\330\205\236\035\316\017\252\375\220\035\r\302\254\227\035\010\222\365\235\035\003\010\311\020\322\250\217\035\003\010\263\017\252\375\220\035\005\032\003\010\301\002\372\336\220\035\002\010\t\372\336\220\035\004\023\030\026\024\343\334\374\034\370\375\373\034\030\344\334\374\034'), + is_extendable=False, + extension_ranges=[], + serialized_start=1608, + serialized_end=1816, +) + + +_AGGREGATEMESSAGESET = _descriptor.Descriptor( + name='AggregateMessageSet', + full_name='protobuf_unittest.AggregateMessageSet', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\010\001'), + is_extendable=True, + extension_ranges=[(4, 2147483647), ], + serialized_start=1818, + serialized_end=1853, +) + + +_AGGREGATEMESSAGESETELEMENT = _descriptor.Descriptor( + name='AggregateMessageSetElement', + full_name='protobuf_unittest.AggregateMessageSetElement', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='s', full_name='protobuf_unittest.AggregateMessageSetElement.s', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + _descriptor.FieldDescriptor( + name='message_set_extension', full_name='protobuf_unittest.AggregateMessageSetElement.message_set_extension', index=0, + number=15447542, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None), + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1856, + serialized_end=2016, +) + + +_AGGREGATE = _descriptor.Descriptor( + name='Aggregate', + full_name='protobuf_unittest.Aggregate', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='i', full_name='protobuf_unittest.Aggregate.i', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='s', full_name='protobuf_unittest.Aggregate.s', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='sub', full_name='protobuf_unittest.Aggregate.sub', index=2, + number=3, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='file', full_name='protobuf_unittest.Aggregate.file', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='mset', full_name='protobuf_unittest.Aggregate.mset', index=4, + number=5, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + _descriptor.FieldDescriptor( + name='nested', full_name='protobuf_unittest.Aggregate.nested', index=0, + number=15476903, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None), + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=2019, + serialized_end=2272, +) + + +_AGGREGATEMESSAGE = _descriptor.Descriptor( + name='AggregateMessage', + full_name='protobuf_unittest.AggregateMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='fieldname', full_name='protobuf_unittest.AggregateMessage.fieldname', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\362\241\207;\021\022\017FieldAnnotation')), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\302\321\206;\025\010e\022\021MessageAnnotation'), + is_extendable=False, + extension_ranges=[], + serialized_start=2274, + serialized_end=2363, +) + + +_NESTEDOPTIONTYPE_NESTEDMESSAGE = _descriptor.Descriptor( + name='NestedMessage', + full_name='protobuf_unittest.NestedOptionType.NestedMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='nested_field', full_name='protobuf_unittest.NestedOptionType.NestedMessage.nested_field', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\301\340\303\035\352\003\000\000\000\000\000\000')), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\340\351\302\035\351\007'), + is_extendable=False, + extension_ranges=[], + serialized_start=2386, + serialized_end=2445, +) + +_NESTEDOPTIONTYPE = _descriptor.Descriptor( + name='NestedOptionType', + full_name='protobuf_unittest.NestedOptionType', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + _descriptor.FieldDescriptor( + name='nested_extension', full_name='protobuf_unittest.NestedOptionType.nested_extension', index=0, + number=7912573, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\310\213\312\035\355\007')), + ], + nested_types=[_NESTEDOPTIONTYPE_NESTEDMESSAGE, ], + enum_types=[ + _NESTEDOPTIONTYPE_NESTEDENUM, + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=2366, + serialized_end=2567, +) + +_TESTMESSAGEWITHCUSTOMOPTIONS_ANENUM.containing_type = _TESTMESSAGEWITHCUSTOMOPTIONS; +_DUMMYMESSAGECONTAININGENUM_TESTENUMTYPE.containing_type = _DUMMYMESSAGECONTAININGENUM; +_COMPLEXOPTIONTYPE2_COMPLEXOPTIONTYPE4.containing_type = _COMPLEXOPTIONTYPE2; +_COMPLEXOPTIONTYPE2.fields_by_name['bar'].message_type = _COMPLEXOPTIONTYPE1 +_COMPLEXOPTIONTYPE2.fields_by_name['fred'].message_type = _COMPLEXOPTIONTYPE2_COMPLEXOPTIONTYPE4 +_COMPLEXOPTIONTYPE3_COMPLEXOPTIONTYPE5.containing_type = _COMPLEXOPTIONTYPE3; +_COMPLEXOPTIONTYPE3.fields_by_name['complexoptiontype5'].message_type = _COMPLEXOPTIONTYPE3_COMPLEXOPTIONTYPE5 +_AGGREGATE.fields_by_name['sub'].message_type = _AGGREGATE +_AGGREGATE.fields_by_name['file'].message_type = google.protobuf.descriptor_pb2._FILEOPTIONS +_AGGREGATE.fields_by_name['mset'].message_type = _AGGREGATEMESSAGESET +_NESTEDOPTIONTYPE_NESTEDMESSAGE.containing_type = _NESTEDOPTIONTYPE; +_NESTEDOPTIONTYPE_NESTEDENUM.containing_type = _NESTEDOPTIONTYPE; +DESCRIPTOR.message_types_by_name['TestMessageWithCustomOptions'] = _TESTMESSAGEWITHCUSTOMOPTIONS +DESCRIPTOR.message_types_by_name['CustomOptionFooRequest'] = _CUSTOMOPTIONFOOREQUEST +DESCRIPTOR.message_types_by_name['CustomOptionFooResponse'] = _CUSTOMOPTIONFOORESPONSE +DESCRIPTOR.message_types_by_name['CustomOptionFooClientMessage'] = _CUSTOMOPTIONFOOCLIENTMESSAGE +DESCRIPTOR.message_types_by_name['CustomOptionFooServerMessage'] = _CUSTOMOPTIONFOOSERVERMESSAGE +DESCRIPTOR.message_types_by_name['DummyMessageContainingEnum'] = _DUMMYMESSAGECONTAININGENUM +DESCRIPTOR.message_types_by_name['DummyMessageInvalidAsOptionType'] = _DUMMYMESSAGEINVALIDASOPTIONTYPE +DESCRIPTOR.message_types_by_name['CustomOptionMinIntegerValues'] = _CUSTOMOPTIONMININTEGERVALUES +DESCRIPTOR.message_types_by_name['CustomOptionMaxIntegerValues'] = _CUSTOMOPTIONMAXINTEGERVALUES +DESCRIPTOR.message_types_by_name['CustomOptionOtherValues'] = _CUSTOMOPTIONOTHERVALUES +DESCRIPTOR.message_types_by_name['SettingRealsFromPositiveInts'] = _SETTINGREALSFROMPOSITIVEINTS +DESCRIPTOR.message_types_by_name['SettingRealsFromNegativeInts'] = _SETTINGREALSFROMNEGATIVEINTS +DESCRIPTOR.message_types_by_name['ComplexOptionType1'] = _COMPLEXOPTIONTYPE1 +DESCRIPTOR.message_types_by_name['ComplexOptionType2'] = _COMPLEXOPTIONTYPE2 +DESCRIPTOR.message_types_by_name['ComplexOptionType3'] = _COMPLEXOPTIONTYPE3 +DESCRIPTOR.message_types_by_name['ComplexOpt6'] = _COMPLEXOPT6 +DESCRIPTOR.message_types_by_name['VariousComplexOptions'] = _VARIOUSCOMPLEXOPTIONS +DESCRIPTOR.message_types_by_name['AggregateMessageSet'] = _AGGREGATEMESSAGESET +DESCRIPTOR.message_types_by_name['AggregateMessageSetElement'] = _AGGREGATEMESSAGESETELEMENT +DESCRIPTOR.message_types_by_name['Aggregate'] = _AGGREGATE +DESCRIPTOR.message_types_by_name['AggregateMessage'] = _AGGREGATEMESSAGE +DESCRIPTOR.message_types_by_name['NestedOptionType'] = _NESTEDOPTIONTYPE + +class TestMessageWithCustomOptions(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTMESSAGEWITHCUSTOMOPTIONS + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestMessageWithCustomOptions) + +class CustomOptionFooRequest(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _CUSTOMOPTIONFOOREQUEST + + # @@protoc_insertion_point(class_scope:protobuf_unittest.CustomOptionFooRequest) + +class CustomOptionFooResponse(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _CUSTOMOPTIONFOORESPONSE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.CustomOptionFooResponse) + +class CustomOptionFooClientMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _CUSTOMOPTIONFOOCLIENTMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.CustomOptionFooClientMessage) + +class CustomOptionFooServerMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _CUSTOMOPTIONFOOSERVERMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.CustomOptionFooServerMessage) + +class DummyMessageContainingEnum(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _DUMMYMESSAGECONTAININGENUM + + # @@protoc_insertion_point(class_scope:protobuf_unittest.DummyMessageContainingEnum) + +class DummyMessageInvalidAsOptionType(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _DUMMYMESSAGEINVALIDASOPTIONTYPE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.DummyMessageInvalidAsOptionType) + +class CustomOptionMinIntegerValues(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _CUSTOMOPTIONMININTEGERVALUES + + # @@protoc_insertion_point(class_scope:protobuf_unittest.CustomOptionMinIntegerValues) + +class CustomOptionMaxIntegerValues(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _CUSTOMOPTIONMAXINTEGERVALUES + + # @@protoc_insertion_point(class_scope:protobuf_unittest.CustomOptionMaxIntegerValues) + +class CustomOptionOtherValues(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _CUSTOMOPTIONOTHERVALUES + + # @@protoc_insertion_point(class_scope:protobuf_unittest.CustomOptionOtherValues) + +class SettingRealsFromPositiveInts(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _SETTINGREALSFROMPOSITIVEINTS + + # @@protoc_insertion_point(class_scope:protobuf_unittest.SettingRealsFromPositiveInts) + +class SettingRealsFromNegativeInts(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _SETTINGREALSFROMNEGATIVEINTS + + # @@protoc_insertion_point(class_scope:protobuf_unittest.SettingRealsFromNegativeInts) + +class ComplexOptionType1(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _COMPLEXOPTIONTYPE1 + + # @@protoc_insertion_point(class_scope:protobuf_unittest.ComplexOptionType1) + +class ComplexOptionType2(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + + class ComplexOptionType4(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _COMPLEXOPTIONTYPE2_COMPLEXOPTIONTYPE4 + + # @@protoc_insertion_point(class_scope:protobuf_unittest.ComplexOptionType2.ComplexOptionType4) + DESCRIPTOR = _COMPLEXOPTIONTYPE2 + + # @@protoc_insertion_point(class_scope:protobuf_unittest.ComplexOptionType2) + +class ComplexOptionType3(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + + class ComplexOptionType5(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _COMPLEXOPTIONTYPE3_COMPLEXOPTIONTYPE5 + + # @@protoc_insertion_point(class_scope:protobuf_unittest.ComplexOptionType3.ComplexOptionType5) + DESCRIPTOR = _COMPLEXOPTIONTYPE3 + + # @@protoc_insertion_point(class_scope:protobuf_unittest.ComplexOptionType3) + +class ComplexOpt6(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _COMPLEXOPT6 + + # @@protoc_insertion_point(class_scope:protobuf_unittest.ComplexOpt6) + +class VariousComplexOptions(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _VARIOUSCOMPLEXOPTIONS + + # @@protoc_insertion_point(class_scope:protobuf_unittest.VariousComplexOptions) + +class AggregateMessageSet(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _AGGREGATEMESSAGESET + + # @@protoc_insertion_point(class_scope:protobuf_unittest.AggregateMessageSet) + +class AggregateMessageSetElement(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _AGGREGATEMESSAGESETELEMENT + + # @@protoc_insertion_point(class_scope:protobuf_unittest.AggregateMessageSetElement) + +class Aggregate(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _AGGREGATE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.Aggregate) + +class AggregateMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _AGGREGATEMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.AggregateMessage) + +class NestedOptionType(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + + class NestedMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _NESTEDOPTIONTYPE_NESTEDMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.NestedOptionType.NestedMessage) + DESCRIPTOR = _NESTEDOPTIONTYPE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.NestedOptionType) + +google.protobuf.descriptor_pb2.FileOptions.RegisterExtension(file_opt1) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(message_opt1) +google.protobuf.descriptor_pb2.FieldOptions.RegisterExtension(field_opt1) +google.protobuf.descriptor_pb2.FieldOptions.RegisterExtension(field_opt2) +google.protobuf.descriptor_pb2.EnumOptions.RegisterExtension(enum_opt1) +google.protobuf.descriptor_pb2.EnumValueOptions.RegisterExtension(enum_value_opt1) +google.protobuf.descriptor_pb2.ServiceOptions.RegisterExtension(service_opt1) +method_opt1.enum_type = _METHODOPT1 +google.protobuf.descriptor_pb2.MethodOptions.RegisterExtension(method_opt1) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(bool_opt) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(int32_opt) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(int64_opt) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(uint32_opt) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(uint64_opt) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(sint32_opt) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(sint64_opt) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(fixed32_opt) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(fixed64_opt) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(sfixed32_opt) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(sfixed64_opt) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(float_opt) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(double_opt) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(string_opt) +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(bytes_opt) +enum_opt.enum_type = _DUMMYMESSAGECONTAININGENUM_TESTENUMTYPE +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(enum_opt) +message_type_opt.message_type = _DUMMYMESSAGEINVALIDASOPTIONTYPE +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(message_type_opt) +ComplexOptionType1.RegisterExtension(quux) +corge.message_type = _COMPLEXOPTIONTYPE3 +ComplexOptionType1.RegisterExtension(corge) +ComplexOptionType2.RegisterExtension(grault) +garply.message_type = _COMPLEXOPTIONTYPE1 +ComplexOptionType2.RegisterExtension(garply) +complex_opt1.message_type = _COMPLEXOPTIONTYPE1 +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(complex_opt1) +complex_opt2.message_type = _COMPLEXOPTIONTYPE2 +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(complex_opt2) +complex_opt3.message_type = _COMPLEXOPTIONTYPE3 +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(complex_opt3) +complexopt6.message_type = _COMPLEXOPT6 +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(complexopt6) +fileopt.message_type = _AGGREGATE +google.protobuf.descriptor_pb2.FileOptions.RegisterExtension(fileopt) +msgopt.message_type = _AGGREGATE +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(msgopt) +fieldopt.message_type = _AGGREGATE +google.protobuf.descriptor_pb2.FieldOptions.RegisterExtension(fieldopt) +enumopt.message_type = _AGGREGATE +google.protobuf.descriptor_pb2.EnumOptions.RegisterExtension(enumopt) +enumvalopt.message_type = _AGGREGATE +google.protobuf.descriptor_pb2.EnumValueOptions.RegisterExtension(enumvalopt) +serviceopt.message_type = _AGGREGATE +google.protobuf.descriptor_pb2.ServiceOptions.RegisterExtension(serviceopt) +methodopt.message_type = _AGGREGATE +google.protobuf.descriptor_pb2.MethodOptions.RegisterExtension(methodopt) +_COMPLEXOPTIONTYPE2_COMPLEXOPTIONTYPE4.extensions_by_name['complex_opt4'].message_type = _COMPLEXOPTIONTYPE2_COMPLEXOPTIONTYPE4 +google.protobuf.descriptor_pb2.MessageOptions.RegisterExtension(_COMPLEXOPTIONTYPE2_COMPLEXOPTIONTYPE4.extensions_by_name['complex_opt4']) +_AGGREGATEMESSAGESETELEMENT.extensions_by_name['message_set_extension'].message_type = _AGGREGATEMESSAGESETELEMENT +AggregateMessageSet.RegisterExtension(_AGGREGATEMESSAGESETELEMENT.extensions_by_name['message_set_extension']) +_AGGREGATE.extensions_by_name['nested'].message_type = _AGGREGATE +google.protobuf.descriptor_pb2.FileOptions.RegisterExtension(_AGGREGATE.extensions_by_name['nested']) +google.protobuf.descriptor_pb2.FileOptions.RegisterExtension(_NESTEDOPTIONTYPE.extensions_by_name['nested_extension']) + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), '\200\001\001\210\001\001\220\001\001\360\350\301\035\352\255\300\345$\372\354\205;p\010d\022\016FileAnnotation\032\026\022\024NestedFileAnnotation\"\036\372\354\205;\031\022\027FileExtensionAnnotation*$\013\020\366\353\256\007\032\033\n\031EmbeddedMessageSetElement\014') +_AGGREGATEENUM.has_options = True +_AGGREGATEENUM._options = _descriptor._ParseOptions(descriptor_pb2.EnumOptions(), '\222\225\210;\020\022\016EnumAnnotation') +_AGGREGATEENUM.values_by_name["VALUE"].has_options = True +_AGGREGATEENUM.values_by_name["VALUE"]._options = _descriptor._ParseOptions(descriptor_pb2.EnumValueOptions(), '\312\374\211;\025\022\023EnumValueAnnotation') +_TESTMESSAGEWITHCUSTOMOPTIONS_ANENUM.has_options = True +_TESTMESSAGEWITHCUSTOMOPTIONS_ANENUM._options = _descriptor._ParseOptions(descriptor_pb2.EnumOptions(), '\305\366\311\035\353\374\377\377') +_TESTMESSAGEWITHCUSTOMOPTIONS_ANENUM.values_by_name["ANENUM_VAL2"].has_options = True +_TESTMESSAGEWITHCUSTOMOPTIONS_ANENUM.values_by_name["ANENUM_VAL2"]._options = _descriptor._ParseOptions(descriptor_pb2.EnumValueOptions(), '\260\206\372\005{') +_TESTMESSAGEWITHCUSTOMOPTIONS.fields_by_name['field1'].has_options = True +_TESTMESSAGEWITHCUSTOMOPTIONS.fields_by_name['field1']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001\301\340\303\035-\341u\n\002\000\000\000') +_TESTMESSAGEWITHCUSTOMOPTIONS.has_options = True +_TESTMESSAGEWITHCUSTOMOPTIONS._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\010\000\340\351\302\035\310\377\377\377\377\377\377\377\377\001') +_CUSTOMOPTIONMININTEGERVALUES.has_options = True +_CUSTOMOPTIONMININTEGERVALUES._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\320\336\262\035\000\350\306\262\035\200\200\200\200\370\377\377\377\377\001\260\274\262\035\200\200\200\200\200\200\200\200\200\001\200\223\262\035\000\370\365\260\035\000\200\304\260\035\377\377\377\377\017\370\227\260\035\377\377\377\377\377\377\377\377\377\001\235\365\257\035\000\000\000\000\221\356\257\035\000\000\000\000\000\000\000\000\255\215\257\035\000\000\000\200\231\326\250\035\000\000\000\000\000\000\000\200') +_CUSTOMOPTIONMAXINTEGERVALUES.has_options = True +_CUSTOMOPTIONMAXINTEGERVALUES._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\320\336\262\035\001\350\306\262\035\377\377\377\377\007\260\274\262\035\377\377\377\377\377\377\377\377\177\200\223\262\035\377\377\377\377\017\370\365\260\035\377\377\377\377\377\377\377\377\377\001\200\304\260\035\376\377\377\377\017\370\227\260\035\376\377\377\377\377\377\377\377\377\001\235\365\257\035\377\377\377\377\221\356\257\035\377\377\377\377\377\377\377\377\255\215\257\035\377\377\377\177\231\326\250\035\377\377\377\377\377\377\377\177') +_CUSTOMOPTIONOTHERVALUES.has_options = True +_CUSTOMOPTIONOTHERVALUES._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\350\306\262\035\234\377\377\377\377\377\377\377\377\001\365\337\243\035\347\207EA\351\334\242\035\373Y\214B\312\300\363?\252\334\242\035\016Hello, \"World\"\262\331\242\035\013Hello\000World\210\331\242\035\351\377\377\377\377\377\377\377\377\001') +_SETTINGREALSFROMPOSITIVEINTS.has_options = True +_SETTINGREALSFROMPOSITIVEINTS._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\365\337\243\035\000\000@A\351\334\242\035\000\000\000\000\000@c@') +_SETTINGREALSFROMNEGATIVEINTS.has_options = True +_SETTINGREALSFROMNEGATIVEINTS._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\365\337\243\035\000\000@\301\351\334\242\035\000\000\000\000\000@c\300') +_VARIOUSCOMPLEXOPTIONS.has_options = True +_VARIOUSCOMPLEXOPTIONS._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\242\342\225\035\002\010*\242\342\225\035\006\330\205\236\035\304\002\242\342\225\035\010\222\365\235\035\003\010\354\006\252\375\220\035\003\020\333\007\252\375\220\035\006\370\346\227\035\216\005\252\375\220\035\005\n\003\010\347\005\252\375\220\035\010\n\006\330\205\236\035\317\017\252\375\220\035\n\n\010\222\365\235\035\003\010\330\017\252\375\220\035\010\302\254\227\035\003\010\345\005\252\375\220\035\013\302\254\227\035\006\330\205\236\035\316\017\252\375\220\035\r\302\254\227\035\010\222\365\235\035\003\010\311\020\322\250\217\035\003\010\263\017\252\375\220\035\005\032\003\010\301\002\372\336\220\035\002\010\t\372\336\220\035\004\023\030\026\024\343\334\374\034\370\375\373\034\030\344\334\374\034') +_AGGREGATEMESSAGESET.has_options = True +_AGGREGATEMESSAGESET._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\010\001') +_AGGREGATEMESSAGE.fields_by_name['fieldname'].has_options = True +_AGGREGATEMESSAGE.fields_by_name['fieldname']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\362\241\207;\021\022\017FieldAnnotation') +_AGGREGATEMESSAGE.has_options = True +_AGGREGATEMESSAGE._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\302\321\206;\025\010e\022\021MessageAnnotation') +_NESTEDOPTIONTYPE_NESTEDMESSAGE.fields_by_name['nested_field'].has_options = True +_NESTEDOPTIONTYPE_NESTEDMESSAGE.fields_by_name['nested_field']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\301\340\303\035\352\003\000\000\000\000\000\000') +_NESTEDOPTIONTYPE_NESTEDMESSAGE.has_options = True +_NESTEDOPTIONTYPE_NESTEDMESSAGE._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\340\351\302\035\351\007') +_NESTEDOPTIONTYPE_NESTEDENUM.has_options = True +_NESTEDOPTIONTYPE_NESTEDENUM._options = _descriptor._ParseOptions(descriptor_pb2.EnumOptions(), '\305\366\311\035\353\003\000\000') +_NESTEDOPTIONTYPE_NESTEDENUM.values_by_name["NESTED_ENUM_VALUE"].has_options = True +_NESTEDOPTIONTYPE_NESTEDENUM.values_by_name["NESTED_ENUM_VALUE"]._options = _descriptor._ParseOptions(descriptor_pb2.EnumValueOptions(), '\260\206\372\005\354\007') +_NESTEDOPTIONTYPE.extensions_by_name['nested_extension'].has_options = True +_NESTEDOPTIONTYPE.extensions_by_name['nested_extension']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\310\213\312\035\355\007') + +_TESTSERVICEWITHCUSTOMOPTIONS = _descriptor.ServiceDescriptor( + name='TestServiceWithCustomOptions', + full_name='protobuf_unittest.TestServiceWithCustomOptions', + file=DESCRIPTOR, + index=0, + options=_descriptor._ParseOptions(descriptor_pb2.ServiceOptions(), '\220\262\213\036\323\333\200\313I'), + serialized_start=2705, + serialized_end=2847, + methods=[ + _descriptor.MethodDescriptor( + name='Foo', + full_name='protobuf_unittest.TestServiceWithCustomOptions.Foo', + index=0, + containing_service=None, + input_type=_CUSTOMOPTIONFOOREQUEST, + output_type=_CUSTOMOPTIONFOORESPONSE, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), '\340\372\214\036\002'), + ), +]) + +class TestServiceWithCustomOptions(_service.Service): + __metaclass__ = service_reflection.GeneratedServiceType + DESCRIPTOR = _TESTSERVICEWITHCUSTOMOPTIONS +class TestServiceWithCustomOptions_Stub(TestServiceWithCustomOptions): + __metaclass__ = service_reflection.GeneratedServiceStubType + DESCRIPTOR = _TESTSERVICEWITHCUSTOMOPTIONS + + +_AGGREGATESERVICE = _descriptor.ServiceDescriptor( + name='AggregateService', + full_name='protobuf_unittest.AggregateService', + file=DESCRIPTOR, + index=1, + options=_descriptor._ParseOptions(descriptor_pb2.ServiceOptions(), '\312\373\216;\023\022\021ServiceAnnotation'), + serialized_start=2850, + serialized_end=3003, + methods=[ + _descriptor.MethodDescriptor( + name='Method', + full_name='protobuf_unittest.AggregateService.Method', + index=0, + containing_service=None, + input_type=_AGGREGATEMESSAGE, + output_type=_AGGREGATEMESSAGE, + options=_descriptor._ParseOptions(descriptor_pb2.MethodOptions(), '\312\310\226;\022\022\020MethodAnnotation'), + ), +]) + +class AggregateService(_service.Service): + __metaclass__ = service_reflection.GeneratedServiceType + DESCRIPTOR = _AGGREGATESERVICE +class AggregateService_Stub(AggregateService): + __metaclass__ = service_reflection.GeneratedServiceStubType + DESCRIPTOR = _AGGREGATESERVICE + +# @@protoc_insertion_point(module_scope) diff --git a/code/push/google/protobuf/unittest_import_pb2.py b/code/push/google/protobuf/unittest_import_pb2.py new file mode 100644 index 0000000..8a9dc3d --- /dev/null +++ b/code/push/google/protobuf/unittest_import_pb2.py @@ -0,0 +1,91 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/protobuf/unittest_import.proto + +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + + +import google.protobuf.unittest_import_public_pb2 + +from google.protobuf.unittest_import_public_pb2 import * + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/protobuf/unittest_import.proto', + package='protobuf_unittest_import', + serialized_pb='\n%google/protobuf/unittest_import.proto\x12\x18protobuf_unittest_import\x1a,google/protobuf/unittest_import_public.proto\"\x1a\n\rImportMessage\x12\t\n\x01\x64\x18\x01 \x01(\x05*<\n\nImportEnum\x12\x0e\n\nIMPORT_FOO\x10\x07\x12\x0e\n\nIMPORT_BAR\x10\x08\x12\x0e\n\nIMPORT_BAZ\x10\tB\x1c\n\x18\x63om.google.protobuf.testH\x01P\x00') + +_IMPORTENUM = _descriptor.EnumDescriptor( + name='ImportEnum', + full_name='protobuf_unittest_import.ImportEnum', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='IMPORT_FOO', index=0, number=7, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='IMPORT_BAR', index=1, number=8, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='IMPORT_BAZ', index=2, number=9, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=141, + serialized_end=201, +) + +ImportEnum = enum_type_wrapper.EnumTypeWrapper(_IMPORTENUM) +IMPORT_FOO = 7 +IMPORT_BAR = 8 +IMPORT_BAZ = 9 + + + +_IMPORTMESSAGE = _descriptor.Descriptor( + name='ImportMessage', + full_name='protobuf_unittest_import.ImportMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='d', full_name='protobuf_unittest_import.ImportMessage.d', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=113, + serialized_end=139, +) + +DESCRIPTOR.message_types_by_name['ImportMessage'] = _IMPORTMESSAGE + +class ImportMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _IMPORTMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest_import.ImportMessage) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), '\n\030com.google.protobuf.testH\001') +# @@protoc_insertion_point(module_scope) diff --git a/code/push/google/protobuf/unittest_import_public_pb2.py b/code/push/google/protobuf/unittest_import_public_pb2.py new file mode 100644 index 0000000..251116b --- /dev/null +++ b/code/push/google/protobuf/unittest_import_public_pb2.py @@ -0,0 +1,59 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/protobuf/unittest_import_public.proto + +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/protobuf/unittest_import_public.proto', + package='protobuf_unittest_import', + serialized_pb='\n,google/protobuf/unittest_import_public.proto\x12\x18protobuf_unittest_import\" \n\x13PublicImportMessage\x12\t\n\x01\x65\x18\x01 \x01(\x05\x42\x1a\n\x18\x63om.google.protobuf.test') + + + + +_PUBLICIMPORTMESSAGE = _descriptor.Descriptor( + name='PublicImportMessage', + full_name='protobuf_unittest_import.PublicImportMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='e', full_name='protobuf_unittest_import.PublicImportMessage.e', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=74, + serialized_end=106, +) + +DESCRIPTOR.message_types_by_name['PublicImportMessage'] = _PUBLICIMPORTMESSAGE + +class PublicImportMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _PUBLICIMPORTMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest_import.PublicImportMessage) + + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), '\n\030com.google.protobuf.test') +# @@protoc_insertion_point(module_scope) diff --git a/code/push/google/protobuf/unittest_mset_pb2.py b/code/push/google/protobuf/unittest_mset_pb2.py new file mode 100644 index 0000000..a42b768 --- /dev/null +++ b/code/push/google/protobuf/unittest_mset_pb2.py @@ -0,0 +1,255 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/protobuf/unittest_mset.proto + +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/protobuf/unittest_mset.proto', + package='protobuf_unittest', + serialized_pb='\n#google/protobuf/unittest_mset.proto\x12\x11protobuf_unittest\"\x1e\n\x0eTestMessageSet*\x08\x08\x04\x10\xff\xff\xff\xff\x07:\x02\x08\x01\"Q\n\x17TestMessageSetContainer\x12\x36\n\x0bmessage_set\x18\x01 \x01(\x0b\x32!.protobuf_unittest.TestMessageSet\"\x96\x01\n\x18TestMessageSetExtension1\x12\t\n\x01i\x18\x0f \x01(\x05\x32o\n\x15message_set_extension\x12!.protobuf_unittest.TestMessageSet\x18\xb0\xa6^ \x01(\x0b\x32+.protobuf_unittest.TestMessageSetExtension1\"\x98\x01\n\x18TestMessageSetExtension2\x12\x0b\n\x03str\x18\x19 \x01(\t2o\n\x15message_set_extension\x12!.protobuf_unittest.TestMessageSet\x18\xf9\xbb^ \x01(\x0b\x32+.protobuf_unittest.TestMessageSetExtension2\"n\n\rRawMessageSet\x12\x33\n\x04item\x18\x01 \x03(\n2%.protobuf_unittest.RawMessageSet.Item\x1a(\n\x04Item\x12\x0f\n\x07type_id\x18\x02 \x02(\x05\x12\x0f\n\x07message\x18\x03 \x02(\x0c\x42\x02H\x01') + + + + +_TESTMESSAGESET = _descriptor.Descriptor( + name='TestMessageSet', + full_name='protobuf_unittest.TestMessageSet', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=_descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\010\001'), + is_extendable=True, + extension_ranges=[(4, 2147483647), ], + serialized_start=58, + serialized_end=88, +) + + +_TESTMESSAGESETCONTAINER = _descriptor.Descriptor( + name='TestMessageSetContainer', + full_name='protobuf_unittest.TestMessageSetContainer', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='message_set', full_name='protobuf_unittest.TestMessageSetContainer.message_set', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=90, + serialized_end=171, +) + + +_TESTMESSAGESETEXTENSION1 = _descriptor.Descriptor( + name='TestMessageSetExtension1', + full_name='protobuf_unittest.TestMessageSetExtension1', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='i', full_name='protobuf_unittest.TestMessageSetExtension1.i', index=0, + number=15, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + _descriptor.FieldDescriptor( + name='message_set_extension', full_name='protobuf_unittest.TestMessageSetExtension1.message_set_extension', index=0, + number=1545008, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None), + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=174, + serialized_end=324, +) + + +_TESTMESSAGESETEXTENSION2 = _descriptor.Descriptor( + name='TestMessageSetExtension2', + full_name='protobuf_unittest.TestMessageSetExtension2', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='str', full_name='protobuf_unittest.TestMessageSetExtension2.str', index=0, + number=25, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + _descriptor.FieldDescriptor( + name='message_set_extension', full_name='protobuf_unittest.TestMessageSetExtension2.message_set_extension', index=0, + number=1547769, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None), + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=327, + serialized_end=479, +) + + +_RAWMESSAGESET_ITEM = _descriptor.Descriptor( + name='Item', + full_name='protobuf_unittest.RawMessageSet.Item', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='type_id', full_name='protobuf_unittest.RawMessageSet.Item.type_id', index=0, + number=2, type=5, cpp_type=1, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='message', full_name='protobuf_unittest.RawMessageSet.Item.message', index=1, + number=3, type=12, cpp_type=9, label=2, + has_default_value=False, default_value="", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=551, + serialized_end=591, +) + +_RAWMESSAGESET = _descriptor.Descriptor( + name='RawMessageSet', + full_name='protobuf_unittest.RawMessageSet', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='item', full_name='protobuf_unittest.RawMessageSet.item', index=0, + number=1, type=10, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_RAWMESSAGESET_ITEM, ], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=481, + serialized_end=591, +) + +_TESTMESSAGESETCONTAINER.fields_by_name['message_set'].message_type = _TESTMESSAGESET +_RAWMESSAGESET_ITEM.containing_type = _RAWMESSAGESET; +_RAWMESSAGESET.fields_by_name['item'].message_type = _RAWMESSAGESET_ITEM +DESCRIPTOR.message_types_by_name['TestMessageSet'] = _TESTMESSAGESET +DESCRIPTOR.message_types_by_name['TestMessageSetContainer'] = _TESTMESSAGESETCONTAINER +DESCRIPTOR.message_types_by_name['TestMessageSetExtension1'] = _TESTMESSAGESETEXTENSION1 +DESCRIPTOR.message_types_by_name['TestMessageSetExtension2'] = _TESTMESSAGESETEXTENSION2 +DESCRIPTOR.message_types_by_name['RawMessageSet'] = _RAWMESSAGESET + +class TestMessageSet(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTMESSAGESET + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestMessageSet) + +class TestMessageSetContainer(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTMESSAGESETCONTAINER + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestMessageSetContainer) + +class TestMessageSetExtension1(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTMESSAGESETEXTENSION1 + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestMessageSetExtension1) + +class TestMessageSetExtension2(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTMESSAGESETEXTENSION2 + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestMessageSetExtension2) + +class RawMessageSet(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + + class Item(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _RAWMESSAGESET_ITEM + + # @@protoc_insertion_point(class_scope:protobuf_unittest.RawMessageSet.Item) + DESCRIPTOR = _RAWMESSAGESET + + # @@protoc_insertion_point(class_scope:protobuf_unittest.RawMessageSet) + +_TESTMESSAGESETEXTENSION1.extensions_by_name['message_set_extension'].message_type = _TESTMESSAGESETEXTENSION1 +TestMessageSet.RegisterExtension(_TESTMESSAGESETEXTENSION1.extensions_by_name['message_set_extension']) +_TESTMESSAGESETEXTENSION2.extensions_by_name['message_set_extension'].message_type = _TESTMESSAGESETEXTENSION2 +TestMessageSet.RegisterExtension(_TESTMESSAGESETEXTENSION2.extensions_by_name['message_set_extension']) + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), 'H\001') +_TESTMESSAGESET.has_options = True +_TESTMESSAGESET._options = _descriptor._ParseOptions(descriptor_pb2.MessageOptions(), '\010\001') +# @@protoc_insertion_point(module_scope) diff --git a/code/push/google/protobuf/unittest_no_generic_services_pb2.py b/code/push/google/protobuf/unittest_no_generic_services_pb2.py new file mode 100644 index 0000000..baa7189 --- /dev/null +++ b/code/push/google/protobuf/unittest_no_generic_services_pb2.py @@ -0,0 +1,86 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/protobuf/unittest_no_generic_services.proto + +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + + + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/protobuf/unittest_no_generic_services.proto', + package='google.protobuf.no_generic_services_test', + serialized_pb='\n2google/protobuf/unittest_no_generic_services.proto\x12(google.protobuf.no_generic_services_test\"#\n\x0bTestMessage\x12\t\n\x01\x61\x18\x01 \x01(\x05*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02*\x13\n\x08TestEnum\x12\x07\n\x03\x46OO\x10\x01\x32\x82\x01\n\x0bTestService\x12s\n\x03\x46oo\x12\x35.google.protobuf.no_generic_services_test.TestMessage\x1a\x35.google.protobuf.no_generic_services_test.TestMessage:N\n\x0etest_extension\x12\x35.google.protobuf.no_generic_services_test.TestMessage\x18\xe8\x07 \x01(\x05') + +_TESTENUM = _descriptor.EnumDescriptor( + name='TestEnum', + full_name='google.protobuf.no_generic_services_test.TestEnum', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='FOO', index=0, number=1, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=133, + serialized_end=152, +) + +TestEnum = enum_type_wrapper.EnumTypeWrapper(_TESTENUM) +FOO = 1 + +TEST_EXTENSION_FIELD_NUMBER = 1000 +test_extension = _descriptor.FieldDescriptor( + name='test_extension', full_name='google.protobuf.no_generic_services_test.test_extension', index=0, + number=1000, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) + + +_TESTMESSAGE = _descriptor.Descriptor( + name='TestMessage', + full_name='google.protobuf.no_generic_services_test.TestMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='a', full_name='google.protobuf.no_generic_services_test.TestMessage.a', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(1000, 536870912), ], + serialized_start=96, + serialized_end=131, +) + +DESCRIPTOR.message_types_by_name['TestMessage'] = _TESTMESSAGE + +class TestMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTMESSAGE + + # @@protoc_insertion_point(class_scope:google.protobuf.no_generic_services_test.TestMessage) + +TestMessage.RegisterExtension(test_extension) + +# @@protoc_insertion_point(module_scope) diff --git a/code/push/google/protobuf/unittest_pb2.py b/code/push/google/protobuf/unittest_pb2.py new file mode 100644 index 0000000..b17eab9 --- /dev/null +++ b/code/push/google/protobuf/unittest_pb2.py @@ -0,0 +1,4440 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! +# source: google/protobuf/unittest.proto + +from google.protobuf.internal import enum_type_wrapper +from google.protobuf import descriptor as _descriptor +from google.protobuf import message as _message +from google.protobuf import reflection as _reflection +from google.protobuf import service as _service +from google.protobuf import service_reflection +from google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + + +import google.protobuf.unittest_import_pb2 + + +DESCRIPTOR = _descriptor.FileDescriptor( + name='google/protobuf/unittest.proto', + package='protobuf_unittest', + serialized_pb='\n\x1egoogle/protobuf/unittest.proto\x12\x11protobuf_unittest\x1a%google/protobuf/unittest_import.proto\"\xb6\x17\n\x0cTestAllTypes\x12\x16\n\x0eoptional_int32\x18\x01 \x01(\x05\x12\x16\n\x0eoptional_int64\x18\x02 \x01(\x03\x12\x17\n\x0foptional_uint32\x18\x03 \x01(\r\x12\x17\n\x0foptional_uint64\x18\x04 \x01(\x04\x12\x17\n\x0foptional_sint32\x18\x05 \x01(\x11\x12\x17\n\x0foptional_sint64\x18\x06 \x01(\x12\x12\x18\n\x10optional_fixed32\x18\x07 \x01(\x07\x12\x18\n\x10optional_fixed64\x18\x08 \x01(\x06\x12\x19\n\x11optional_sfixed32\x18\t \x01(\x0f\x12\x19\n\x11optional_sfixed64\x18\n \x01(\x10\x12\x16\n\x0eoptional_float\x18\x0b \x01(\x02\x12\x17\n\x0foptional_double\x18\x0c \x01(\x01\x12\x15\n\roptional_bool\x18\r \x01(\x08\x12\x17\n\x0foptional_string\x18\x0e \x01(\t\x12\x16\n\x0eoptional_bytes\x18\x0f \x01(\x0c\x12\x44\n\roptionalgroup\x18\x10 \x01(\n2-.protobuf_unittest.TestAllTypes.OptionalGroup\x12N\n\x17optional_nested_message\x18\x12 \x01(\x0b\x32-.protobuf_unittest.TestAllTypes.NestedMessage\x12\x43\n\x18optional_foreign_message\x18\x13 \x01(\x0b\x32!.protobuf_unittest.ForeignMessage\x12H\n\x17optional_import_message\x18\x14 \x01(\x0b\x32\'.protobuf_unittest_import.ImportMessage\x12H\n\x14optional_nested_enum\x18\x15 \x01(\x0e\x32*.protobuf_unittest.TestAllTypes.NestedEnum\x12=\n\x15optional_foreign_enum\x18\x16 \x01(\x0e\x32\x1e.protobuf_unittest.ForeignEnum\x12\x42\n\x14optional_import_enum\x18\x17 \x01(\x0e\x32$.protobuf_unittest_import.ImportEnum\x12!\n\x15optional_string_piece\x18\x18 \x01(\tB\x02\x08\x02\x12\x19\n\roptional_cord\x18\x19 \x01(\tB\x02\x08\x01\x12U\n\x1eoptional_public_import_message\x18\x1a \x01(\x0b\x32-.protobuf_unittest_import.PublicImportMessage\x12P\n\x15optional_lazy_message\x18\x1b \x01(\x0b\x32-.protobuf_unittest.TestAllTypes.NestedMessageB\x02(\x01\x12\x16\n\x0erepeated_int32\x18\x1f \x03(\x05\x12\x16\n\x0erepeated_int64\x18 \x03(\x03\x12\x17\n\x0frepeated_uint32\x18! \x03(\r\x12\x17\n\x0frepeated_uint64\x18\" \x03(\x04\x12\x17\n\x0frepeated_sint32\x18# \x03(\x11\x12\x17\n\x0frepeated_sint64\x18$ \x03(\x12\x12\x18\n\x10repeated_fixed32\x18% \x03(\x07\x12\x18\n\x10repeated_fixed64\x18& \x03(\x06\x12\x19\n\x11repeated_sfixed32\x18\' \x03(\x0f\x12\x19\n\x11repeated_sfixed64\x18( \x03(\x10\x12\x16\n\x0erepeated_float\x18) \x03(\x02\x12\x17\n\x0frepeated_double\x18* \x03(\x01\x12\x15\n\rrepeated_bool\x18+ \x03(\x08\x12\x17\n\x0frepeated_string\x18, \x03(\t\x12\x16\n\x0erepeated_bytes\x18- \x03(\x0c\x12\x44\n\rrepeatedgroup\x18. \x03(\n2-.protobuf_unittest.TestAllTypes.RepeatedGroup\x12N\n\x17repeated_nested_message\x18\x30 \x03(\x0b\x32-.protobuf_unittest.TestAllTypes.NestedMessage\x12\x43\n\x18repeated_foreign_message\x18\x31 \x03(\x0b\x32!.protobuf_unittest.ForeignMessage\x12H\n\x17repeated_import_message\x18\x32 \x03(\x0b\x32\'.protobuf_unittest_import.ImportMessage\x12H\n\x14repeated_nested_enum\x18\x33 \x03(\x0e\x32*.protobuf_unittest.TestAllTypes.NestedEnum\x12=\n\x15repeated_foreign_enum\x18\x34 \x03(\x0e\x32\x1e.protobuf_unittest.ForeignEnum\x12\x42\n\x14repeated_import_enum\x18\x35 \x03(\x0e\x32$.protobuf_unittest_import.ImportEnum\x12!\n\x15repeated_string_piece\x18\x36 \x03(\tB\x02\x08\x02\x12\x19\n\rrepeated_cord\x18\x37 \x03(\tB\x02\x08\x01\x12P\n\x15repeated_lazy_message\x18\x39 \x03(\x0b\x32-.protobuf_unittest.TestAllTypes.NestedMessageB\x02(\x01\x12\x19\n\rdefault_int32\x18= \x01(\x05:\x02\x34\x31\x12\x19\n\rdefault_int64\x18> \x01(\x03:\x02\x34\x32\x12\x1a\n\x0e\x64\x65\x66\x61ult_uint32\x18? \x01(\r:\x02\x34\x33\x12\x1a\n\x0e\x64\x65\x66\x61ult_uint64\x18@ \x01(\x04:\x02\x34\x34\x12\x1b\n\x0e\x64\x65\x66\x61ult_sint32\x18\x41 \x01(\x11:\x03-45\x12\x1a\n\x0e\x64\x65\x66\x61ult_sint64\x18\x42 \x01(\x12:\x02\x34\x36\x12\x1b\n\x0f\x64\x65\x66\x61ult_fixed32\x18\x43 \x01(\x07:\x02\x34\x37\x12\x1b\n\x0f\x64\x65\x66\x61ult_fixed64\x18\x44 \x01(\x06:\x02\x34\x38\x12\x1c\n\x10\x64\x65\x66\x61ult_sfixed32\x18\x45 \x01(\x0f:\x02\x34\x39\x12\x1d\n\x10\x64\x65\x66\x61ult_sfixed64\x18\x46 \x01(\x10:\x03-50\x12\x1b\n\rdefault_float\x18G \x01(\x02:\x04\x35\x31.5\x12\x1d\n\x0e\x64\x65\x66\x61ult_double\x18H \x01(\x01:\x05\x35\x32\x30\x30\x30\x12\x1a\n\x0c\x64\x65\x66\x61ult_bool\x18I \x01(\x08:\x04true\x12\x1d\n\x0e\x64\x65\x66\x61ult_string\x18J \x01(\t:\x05hello\x12\x1c\n\rdefault_bytes\x18K \x01(\x0c:\x05world\x12L\n\x13\x64\x65\x66\x61ult_nested_enum\x18Q \x01(\x0e\x32*.protobuf_unittest.TestAllTypes.NestedEnum:\x03\x42\x41R\x12I\n\x14\x64\x65\x66\x61ult_foreign_enum\x18R \x01(\x0e\x32\x1e.protobuf_unittest.ForeignEnum:\x0b\x46OREIGN_BAR\x12M\n\x13\x64\x65\x66\x61ult_import_enum\x18S \x01(\x0e\x32$.protobuf_unittest_import.ImportEnum:\nIMPORT_BAR\x12%\n\x14\x64\x65\x66\x61ult_string_piece\x18T \x01(\t:\x03\x61\x62\x63\x42\x02\x08\x02\x12\x1d\n\x0c\x64\x65\x66\x61ult_cord\x18U \x01(\t:\x03\x31\x32\x33\x42\x02\x08\x01\x1a\x1b\n\rNestedMessage\x12\n\n\x02\x62\x62\x18\x01 \x01(\x05\x1a\x1a\n\rOptionalGroup\x12\t\n\x01\x61\x18\x11 \x01(\x05\x1a\x1a\n\rRepeatedGroup\x12\t\n\x01\x61\x18/ \x01(\x05\"\'\n\nNestedEnum\x12\x07\n\x03\x46OO\x10\x01\x12\x07\n\x03\x42\x41R\x10\x02\x12\x07\n\x03\x42\x41Z\x10\x03\"4\n\x14TestDeprecatedFields\x12\x1c\n\x10\x64\x65precated_int32\x18\x01 \x01(\x05\x42\x02\x18\x01\"\x1b\n\x0e\x46oreignMessage\x12\t\n\x01\x63\x18\x01 \x01(\x05\"\x1d\n\x11TestAllExtensions*\x08\x08\x01\x10\x80\x80\x80\x80\x02\"$\n\x17OptionalGroup_extension\x12\t\n\x01\x61\x18\x11 \x01(\x05\"$\n\x17RepeatedGroup_extension\x12\t\n\x01\x61\x18/ \x01(\x05\"P\n\x13TestNestedExtension29\n\x04test\x12$.protobuf_unittest.TestAllExtensions\x18\xea\x07 \x01(\t:\x04test\"\xd5\x05\n\x0cTestRequired\x12\t\n\x01\x61\x18\x01 \x02(\x05\x12\x0e\n\x06\x64ummy2\x18\x02 \x01(\x05\x12\t\n\x01\x62\x18\x03 \x02(\x05\x12\x0e\n\x06\x64ummy4\x18\x04 \x01(\x05\x12\x0e\n\x06\x64ummy5\x18\x05 \x01(\x05\x12\x0e\n\x06\x64ummy6\x18\x06 \x01(\x05\x12\x0e\n\x06\x64ummy7\x18\x07 \x01(\x05\x12\x0e\n\x06\x64ummy8\x18\x08 \x01(\x05\x12\x0e\n\x06\x64ummy9\x18\t \x01(\x05\x12\x0f\n\x07\x64ummy10\x18\n \x01(\x05\x12\x0f\n\x07\x64ummy11\x18\x0b \x01(\x05\x12\x0f\n\x07\x64ummy12\x18\x0c \x01(\x05\x12\x0f\n\x07\x64ummy13\x18\r \x01(\x05\x12\x0f\n\x07\x64ummy14\x18\x0e \x01(\x05\x12\x0f\n\x07\x64ummy15\x18\x0f \x01(\x05\x12\x0f\n\x07\x64ummy16\x18\x10 \x01(\x05\x12\x0f\n\x07\x64ummy17\x18\x11 \x01(\x05\x12\x0f\n\x07\x64ummy18\x18\x12 \x01(\x05\x12\x0f\n\x07\x64ummy19\x18\x13 \x01(\x05\x12\x0f\n\x07\x64ummy20\x18\x14 \x01(\x05\x12\x0f\n\x07\x64ummy21\x18\x15 \x01(\x05\x12\x0f\n\x07\x64ummy22\x18\x16 \x01(\x05\x12\x0f\n\x07\x64ummy23\x18\x17 \x01(\x05\x12\x0f\n\x07\x64ummy24\x18\x18 \x01(\x05\x12\x0f\n\x07\x64ummy25\x18\x19 \x01(\x05\x12\x0f\n\x07\x64ummy26\x18\x1a \x01(\x05\x12\x0f\n\x07\x64ummy27\x18\x1b \x01(\x05\x12\x0f\n\x07\x64ummy28\x18\x1c \x01(\x05\x12\x0f\n\x07\x64ummy29\x18\x1d \x01(\x05\x12\x0f\n\x07\x64ummy30\x18\x1e \x01(\x05\x12\x0f\n\x07\x64ummy31\x18\x1f \x01(\x05\x12\x0f\n\x07\x64ummy32\x18 \x01(\x05\x12\t\n\x01\x63\x18! \x02(\x05\x32V\n\x06single\x12$.protobuf_unittest.TestAllExtensions\x18\xe8\x07 \x01(\x0b\x32\x1f.protobuf_unittest.TestRequired2U\n\x05multi\x12$.protobuf_unittest.TestAllExtensions\x18\xe9\x07 \x03(\x0b\x32\x1f.protobuf_unittest.TestRequired\"\x9a\x01\n\x13TestRequiredForeign\x12\x39\n\x10optional_message\x18\x01 \x01(\x0b\x32\x1f.protobuf_unittest.TestRequired\x12\x39\n\x10repeated_message\x18\x02 \x03(\x0b\x32\x1f.protobuf_unittest.TestRequired\x12\r\n\x05\x64ummy\x18\x03 \x01(\x05\"Z\n\x11TestForeignNested\x12\x45\n\x0e\x66oreign_nested\x18\x01 \x01(\x0b\x32-.protobuf_unittest.TestAllTypes.NestedMessage\"\x12\n\x10TestEmptyMessage\"*\n\x1eTestEmptyMessageWithExtensions*\x08\x08\x01\x10\x80\x80\x80\x80\x02\"7\n\x1bTestMultipleExtensionRanges*\x04\x08*\x10+*\x06\x08\xaf \x10\x94!*\n\x08\x80\x80\x04\x10\x80\x80\x80\x80\x02\"4\n\x18TestReallyLargeTagNumber\x12\t\n\x01\x61\x18\x01 \x01(\x05\x12\r\n\x02\x62\x62\x18\xff\xff\xff\x7f \x01(\x05\"U\n\x14TestRecursiveMessage\x12\x32\n\x01\x61\x18\x01 \x01(\x0b\x32\'.protobuf_unittest.TestRecursiveMessage\x12\t\n\x01i\x18\x02 \x01(\x05\"K\n\x14TestMutualRecursionA\x12\x33\n\x02\x62\x62\x18\x01 \x01(\x0b\x32\'.protobuf_unittest.TestMutualRecursionB\"b\n\x14TestMutualRecursionB\x12\x32\n\x01\x61\x18\x01 \x01(\x0b\x32\'.protobuf_unittest.TestMutualRecursionA\x12\x16\n\x0eoptional_int32\x18\x02 \x01(\x05\"\xb3\x01\n\x12TestDupFieldNumber\x12\t\n\x01\x61\x18\x01 \x01(\x05\x12\x36\n\x03\x66oo\x18\x02 \x01(\n2).protobuf_unittest.TestDupFieldNumber.Foo\x12\x36\n\x03\x62\x61r\x18\x03 \x01(\n2).protobuf_unittest.TestDupFieldNumber.Bar\x1a\x10\n\x03\x46oo\x12\t\n\x01\x61\x18\x01 \x01(\x05\x1a\x10\n\x03\x42\x61r\x12\t\n\x01\x61\x18\x01 \x01(\x05\"L\n\x10TestEagerMessage\x12\x38\n\x0bsub_message\x18\x01 \x01(\x0b\x32\x1f.protobuf_unittest.TestAllTypesB\x02(\x00\"K\n\x0fTestLazyMessage\x12\x38\n\x0bsub_message\x18\x01 \x01(\x0b\x32\x1f.protobuf_unittest.TestAllTypesB\x02(\x01\"\x80\x02\n\x18TestNestedMessageHasBits\x12Z\n\x17optional_nested_message\x18\x01 \x01(\x0b\x32\x39.protobuf_unittest.TestNestedMessageHasBits.NestedMessage\x1a\x87\x01\n\rNestedMessage\x12$\n\x1cnestedmessage_repeated_int32\x18\x01 \x03(\x05\x12P\n%nestedmessage_repeated_foreignmessage\x18\x02 \x03(\x0b\x32!.protobuf_unittest.ForeignMessage\"\xe5\x03\n\x17TestCamelCaseFieldNames\x12\x16\n\x0ePrimitiveField\x18\x01 \x01(\x05\x12\x13\n\x0bStringField\x18\x02 \x01(\t\x12\x31\n\tEnumField\x18\x03 \x01(\x0e\x32\x1e.protobuf_unittest.ForeignEnum\x12\x37\n\x0cMessageField\x18\x04 \x01(\x0b\x32!.protobuf_unittest.ForeignMessage\x12\x1c\n\x10StringPieceField\x18\x05 \x01(\tB\x02\x08\x02\x12\x15\n\tCordField\x18\x06 \x01(\tB\x02\x08\x01\x12\x1e\n\x16RepeatedPrimitiveField\x18\x07 \x03(\x05\x12\x1b\n\x13RepeatedStringField\x18\x08 \x03(\t\x12\x39\n\x11RepeatedEnumField\x18\t \x03(\x0e\x32\x1e.protobuf_unittest.ForeignEnum\x12?\n\x14RepeatedMessageField\x18\n \x03(\x0b\x32!.protobuf_unittest.ForeignMessage\x12$\n\x18RepeatedStringPieceField\x18\x0b \x03(\tB\x02\x08\x02\x12\x1d\n\x11RepeatedCordField\x18\x0c \x03(\tB\x02\x08\x01\"U\n\x12TestFieldOrderings\x12\x11\n\tmy_string\x18\x0b \x01(\t\x12\x0e\n\x06my_int\x18\x01 \x01(\x03\x12\x10\n\x08my_float\x18\x65 \x01(\x02*\x04\x08\x02\x10\x0b*\x04\x08\x0c\x10\x65\"\x8e\x07\n\x18TestExtremeDefaultValues\x12?\n\rescaped_bytes\x18\x01 \x01(\x0c:(\\000\\001\\007\\010\\014\\n\\r\\t\\013\\\\\\\'\\\"\\376\x12 \n\x0clarge_uint32\x18\x02 \x01(\r:\n4294967295\x12*\n\x0clarge_uint64\x18\x03 \x01(\x04:\x14\x31\x38\x34\x34\x36\x37\x34\x34\x30\x37\x33\x37\x30\x39\x35\x35\x31\x36\x31\x35\x12 \n\x0bsmall_int32\x18\x04 \x01(\x05:\x0b-2147483647\x12)\n\x0bsmall_int64\x18\x05 \x01(\x03:\x14-9223372036854775807\x12\'\n\x12really_small_int32\x18\x15 \x01(\x05:\x0b-2147483648\x12\x30\n\x12really_small_int64\x18\x16 \x01(\x03:\x14-9223372036854775808\x12\x18\n\x0butf8_string\x18\x06 \x01(\t:\x03\xe1\x88\xb4\x12\x15\n\nzero_float\x18\x07 \x01(\x02:\x01\x30\x12\x14\n\tone_float\x18\x08 \x01(\x02:\x01\x31\x12\x18\n\x0bsmall_float\x18\t \x01(\x02:\x03\x31.5\x12\x1e\n\x12negative_one_float\x18\n \x01(\x02:\x02-1\x12\x1c\n\x0enegative_float\x18\x0b \x01(\x02:\x04-1.5\x12\x1a\n\x0blarge_float\x18\x0c \x01(\x02:\x05\x32\x65+08\x12$\n\x14small_negative_float\x18\r \x01(\x02:\x06-8e-28\x12\x17\n\ninf_double\x18\x0e \x01(\x01:\x03inf\x12\x1c\n\x0eneg_inf_double\x18\x0f \x01(\x01:\x04-inf\x12\x17\n\nnan_double\x18\x10 \x01(\x01:\x03nan\x12\x16\n\tinf_float\x18\x11 \x01(\x02:\x03inf\x12\x1b\n\rneg_inf_float\x18\x12 \x01(\x02:\x04-inf\x12\x16\n\tnan_float\x18\x13 \x01(\x02:\x03nan\x12+\n\x0c\x63pp_trigraph\x18\x14 \x01(\t:\x15? ? ?? ?? ??? ??/ ??-\x12 \n\x10string_with_zero\x18\x17 \x01(\t:\x06hel\x00lo\x12\"\n\x0f\x62ytes_with_zero\x18\x18 \x01(\x0c:\twor\\000ld\x12(\n\x16string_piece_with_zero\x18\x19 \x01(\t:\x04\x61\x62\x00\x63\x42\x02\x08\x02\x12 \n\x0e\x63ord_with_zero\x18\x1a \x01(\t:\x04\x31\x32\x00\x33\x42\x02\x08\x01\"K\n\x11SparseEnumMessage\x12\x36\n\x0bsparse_enum\x18\x01 \x01(\x0e\x32!.protobuf_unittest.TestSparseEnum\"\x19\n\tOneString\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\t\"\x1a\n\nMoreString\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\t\"\x18\n\x08OneBytes\x12\x0c\n\x04\x64\x61ta\x18\x01 \x01(\x0c\"\x19\n\tMoreBytes\x12\x0c\n\x04\x64\x61ta\x18\x01 \x03(\x0c\"\xaa\x03\n\x0fTestPackedTypes\x12\x18\n\x0cpacked_int32\x18Z \x03(\x05\x42\x02\x10\x01\x12\x18\n\x0cpacked_int64\x18[ \x03(\x03\x42\x02\x10\x01\x12\x19\n\rpacked_uint32\x18\\ \x03(\rB\x02\x10\x01\x12\x19\n\rpacked_uint64\x18] \x03(\x04\x42\x02\x10\x01\x12\x19\n\rpacked_sint32\x18^ \x03(\x11\x42\x02\x10\x01\x12\x19\n\rpacked_sint64\x18_ \x03(\x12\x42\x02\x10\x01\x12\x1a\n\x0epacked_fixed32\x18` \x03(\x07\x42\x02\x10\x01\x12\x1a\n\x0epacked_fixed64\x18\x61 \x03(\x06\x42\x02\x10\x01\x12\x1b\n\x0fpacked_sfixed32\x18\x62 \x03(\x0f\x42\x02\x10\x01\x12\x1b\n\x0fpacked_sfixed64\x18\x63 \x03(\x10\x42\x02\x10\x01\x12\x18\n\x0cpacked_float\x18\x64 \x03(\x02\x42\x02\x10\x01\x12\x19\n\rpacked_double\x18\x65 \x03(\x01\x42\x02\x10\x01\x12\x17\n\x0bpacked_bool\x18\x66 \x03(\x08\x42\x02\x10\x01\x12\x37\n\x0bpacked_enum\x18g \x03(\x0e\x32\x1e.protobuf_unittest.ForeignEnumB\x02\x10\x01\"\xc8\x03\n\x11TestUnpackedTypes\x12\x1a\n\x0eunpacked_int32\x18Z \x03(\x05\x42\x02\x10\x00\x12\x1a\n\x0eunpacked_int64\x18[ \x03(\x03\x42\x02\x10\x00\x12\x1b\n\x0funpacked_uint32\x18\\ \x03(\rB\x02\x10\x00\x12\x1b\n\x0funpacked_uint64\x18] \x03(\x04\x42\x02\x10\x00\x12\x1b\n\x0funpacked_sint32\x18^ \x03(\x11\x42\x02\x10\x00\x12\x1b\n\x0funpacked_sint64\x18_ \x03(\x12\x42\x02\x10\x00\x12\x1c\n\x10unpacked_fixed32\x18` \x03(\x07\x42\x02\x10\x00\x12\x1c\n\x10unpacked_fixed64\x18\x61 \x03(\x06\x42\x02\x10\x00\x12\x1d\n\x11unpacked_sfixed32\x18\x62 \x03(\x0f\x42\x02\x10\x00\x12\x1d\n\x11unpacked_sfixed64\x18\x63 \x03(\x10\x42\x02\x10\x00\x12\x1a\n\x0eunpacked_float\x18\x64 \x03(\x02\x42\x02\x10\x00\x12\x1b\n\x0funpacked_double\x18\x65 \x03(\x01\x42\x02\x10\x00\x12\x19\n\runpacked_bool\x18\x66 \x03(\x08\x42\x02\x10\x00\x12\x39\n\runpacked_enum\x18g \x03(\x0e\x32\x1e.protobuf_unittest.ForeignEnumB\x02\x10\x00\" \n\x14TestPackedExtensions*\x08\x08\x01\x10\x80\x80\x80\x80\x02\"\x99\x04\n\x15TestDynamicExtensions\x12\x19\n\x10scalar_extension\x18\xd0\x0f \x01(\x07\x12\x37\n\x0e\x65num_extension\x18\xd1\x0f \x01(\x0e\x32\x1e.protobuf_unittest.ForeignEnum\x12Y\n\x16\x64ynamic_enum_extension\x18\xd2\x0f \x01(\x0e\x32\x38.protobuf_unittest.TestDynamicExtensions.DynamicEnumType\x12=\n\x11message_extension\x18\xd3\x0f \x01(\x0b\x32!.protobuf_unittest.ForeignMessage\x12_\n\x19\x64ynamic_message_extension\x18\xd4\x0f \x01(\x0b\x32;.protobuf_unittest.TestDynamicExtensions.DynamicMessageType\x12\x1b\n\x12repeated_extension\x18\xd5\x0f \x03(\t\x12\x1d\n\x10packed_extension\x18\xd6\x0f \x03(\x11\x42\x02\x10\x01\x1a,\n\x12\x44ynamicMessageType\x12\x16\n\rdynamic_field\x18\xb4\x10 \x01(\x05\"G\n\x0f\x44ynamicEnumType\x12\x10\n\x0b\x44YNAMIC_FOO\x10\x98\x11\x12\x10\n\x0b\x44YNAMIC_BAR\x10\x99\x11\x12\x10\n\x0b\x44YNAMIC_BAZ\x10\x9a\x11\"\xc0\x01\n#TestRepeatedScalarDifferentTagSizes\x12\x18\n\x10repeated_fixed32\x18\x0c \x03(\x07\x12\x16\n\x0erepeated_int32\x18\r \x03(\x05\x12\x19\n\x10repeated_fixed64\x18\xfe\x0f \x03(\x06\x12\x17\n\x0erepeated_int64\x18\xff\x0f \x03(\x03\x12\x18\n\x0erepeated_float\x18\xfe\xff\x0f \x03(\x02\x12\x19\n\x0frepeated_uint64\x18\xff\xff\x0f \x03(\x04\"\xf7\t\n\x10TestParsingMerge\x12;\n\x12required_all_types\x18\x01 \x02(\x0b\x32\x1f.protobuf_unittest.TestAllTypes\x12;\n\x12optional_all_types\x18\x02 \x01(\x0b\x32\x1f.protobuf_unittest.TestAllTypes\x12;\n\x12repeated_all_types\x18\x03 \x03(\x0b\x32\x1f.protobuf_unittest.TestAllTypes\x12H\n\roptionalgroup\x18\n \x01(\n21.protobuf_unittest.TestParsingMerge.OptionalGroup\x12H\n\rrepeatedgroup\x18\x14 \x03(\n21.protobuf_unittest.TestParsingMerge.RepeatedGroup\x1a\xaa\x04\n\x17RepeatedFieldsGenerator\x12/\n\x06\x66ield1\x18\x01 \x03(\x0b\x32\x1f.protobuf_unittest.TestAllTypes\x12/\n\x06\x66ield2\x18\x02 \x03(\x0b\x32\x1f.protobuf_unittest.TestAllTypes\x12/\n\x06\x66ield3\x18\x03 \x03(\x0b\x32\x1f.protobuf_unittest.TestAllTypes\x12R\n\x06group1\x18\n \x03(\n2B.protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.Group1\x12R\n\x06group2\x18\x14 \x03(\n2B.protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.Group2\x12.\n\x04\x65xt1\x18\xe8\x07 \x03(\x0b\x32\x1f.protobuf_unittest.TestAllTypes\x12.\n\x04\x65xt2\x18\xe9\x07 \x03(\x0b\x32\x1f.protobuf_unittest.TestAllTypes\x1a\x39\n\x06Group1\x12/\n\x06\x66ield1\x18\x0b \x01(\x0b\x32\x1f.protobuf_unittest.TestAllTypes\x1a\x39\n\x06Group2\x12/\n\x06\x66ield1\x18\x15 \x01(\x0b\x32\x1f.protobuf_unittest.TestAllTypes\x1aR\n\rOptionalGroup\x12\x41\n\x18optional_group_all_types\x18\x0b \x01(\x0b\x32\x1f.protobuf_unittest.TestAllTypes\x1aR\n\rRepeatedGroup\x12\x41\n\x18repeated_group_all_types\x18\x15 \x01(\x0b\x32\x1f.protobuf_unittest.TestAllTypes*\t\x08\xe8\x07\x10\x80\x80\x80\x80\x02\x32[\n\x0coptional_ext\x12#.protobuf_unittest.TestParsingMerge\x18\xe8\x07 \x01(\x0b\x32\x1f.protobuf_unittest.TestAllTypes2[\n\x0crepeated_ext\x12#.protobuf_unittest.TestParsingMerge\x18\xe9\x07 \x03(\x0b\x32\x1f.protobuf_unittest.TestAllTypes\"D\n\x1bTestCommentInjectionMessage\x12%\n\x01\x61\x18\x01 \x01(\t:\x1a*/ <- Neither should this.\"\x0c\n\nFooRequest\"\r\n\x0b\x46ooResponse\"\x12\n\x10\x46ooClientMessage\"\x12\n\x10\x46ooServerMessage\"\x0c\n\nBarRequest\"\r\n\x0b\x42\x61rResponse*@\n\x0b\x46oreignEnum\x12\x0f\n\x0b\x46OREIGN_FOO\x10\x04\x12\x0f\n\x0b\x46OREIGN_BAR\x10\x05\x12\x0f\n\x0b\x46OREIGN_BAZ\x10\x06*K\n\x14TestEnumWithDupValue\x12\x08\n\x04\x46OO1\x10\x01\x12\x08\n\x04\x42\x41R1\x10\x02\x12\x07\n\x03\x42\x41Z\x10\x03\x12\x08\n\x04\x46OO2\x10\x01\x12\x08\n\x04\x42\x41R2\x10\x02\x1a\x02\x10\x01*\x89\x01\n\x0eTestSparseEnum\x12\x0c\n\x08SPARSE_A\x10{\x12\x0e\n\x08SPARSE_B\x10\xa6\xe7\x03\x12\x0f\n\x08SPARSE_C\x10\xb2\xb1\x80\x06\x12\x15\n\x08SPARSE_D\x10\xf1\xff\xff\xff\xff\xff\xff\xff\xff\x01\x12\x15\n\x08SPARSE_E\x10\xb4\xde\xfc\xff\xff\xff\xff\xff\xff\x01\x12\x0c\n\x08SPARSE_F\x10\x00\x12\x0c\n\x08SPARSE_G\x10\x02\x32\x99\x01\n\x0bTestService\x12\x44\n\x03\x46oo\x12\x1d.protobuf_unittest.FooRequest\x1a\x1e.protobuf_unittest.FooResponse\x12\x44\n\x03\x42\x61r\x12\x1d.protobuf_unittest.BarRequest\x1a\x1e.protobuf_unittest.BarResponse:F\n\x18optional_int32_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x01 \x01(\x05:F\n\x18optional_int64_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x02 \x01(\x03:G\n\x19optional_uint32_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x03 \x01(\r:G\n\x19optional_uint64_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x04 \x01(\x04:G\n\x19optional_sint32_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x05 \x01(\x11:G\n\x19optional_sint64_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x06 \x01(\x12:H\n\x1aoptional_fixed32_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x07 \x01(\x07:H\n\x1aoptional_fixed64_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x08 \x01(\x06:I\n\x1boptional_sfixed32_extension\x12$.protobuf_unittest.TestAllExtensions\x18\t \x01(\x0f:I\n\x1boptional_sfixed64_extension\x12$.protobuf_unittest.TestAllExtensions\x18\n \x01(\x10:F\n\x18optional_float_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x0b \x01(\x02:G\n\x19optional_double_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x0c \x01(\x01:E\n\x17optional_bool_extension\x12$.protobuf_unittest.TestAllExtensions\x18\r \x01(\x08:G\n\x19optional_string_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x0e \x01(\t:F\n\x18optional_bytes_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x0f \x01(\x0c:q\n\x17optionalgroup_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x10 \x01(\n2*.protobuf_unittest.OptionalGroup_extension:~\n!optional_nested_message_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x12 \x01(\x0b\x32-.protobuf_unittest.TestAllTypes.NestedMessage:s\n\"optional_foreign_message_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x13 \x01(\x0b\x32!.protobuf_unittest.ForeignMessage:x\n!optional_import_message_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x14 \x01(\x0b\x32\'.protobuf_unittest_import.ImportMessage:x\n\x1eoptional_nested_enum_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x15 \x01(\x0e\x32*.protobuf_unittest.TestAllTypes.NestedEnum:m\n\x1foptional_foreign_enum_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x16 \x01(\x0e\x32\x1e.protobuf_unittest.ForeignEnum:r\n\x1eoptional_import_enum_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x17 \x01(\x0e\x32$.protobuf_unittest_import.ImportEnum:Q\n\x1foptional_string_piece_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x18 \x01(\tB\x02\x08\x02:I\n\x17optional_cord_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x19 \x01(\tB\x02\x08\x01:\x85\x01\n(optional_public_import_message_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x1a \x01(\x0b\x32-.protobuf_unittest_import.PublicImportMessage:\x80\x01\n\x1foptional_lazy_message_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x1b \x01(\x0b\x32-.protobuf_unittest.TestAllTypes.NestedMessageB\x02(\x01:F\n\x18repeated_int32_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x1f \x03(\x05:F\n\x18repeated_int64_extension\x12$.protobuf_unittest.TestAllExtensions\x18 \x03(\x03:G\n\x19repeated_uint32_extension\x12$.protobuf_unittest.TestAllExtensions\x18! \x03(\r:G\n\x19repeated_uint64_extension\x12$.protobuf_unittest.TestAllExtensions\x18\" \x03(\x04:G\n\x19repeated_sint32_extension\x12$.protobuf_unittest.TestAllExtensions\x18# \x03(\x11:G\n\x19repeated_sint64_extension\x12$.protobuf_unittest.TestAllExtensions\x18$ \x03(\x12:H\n\x1arepeated_fixed32_extension\x12$.protobuf_unittest.TestAllExtensions\x18% \x03(\x07:H\n\x1arepeated_fixed64_extension\x12$.protobuf_unittest.TestAllExtensions\x18& \x03(\x06:I\n\x1brepeated_sfixed32_extension\x12$.protobuf_unittest.TestAllExtensions\x18\' \x03(\x0f:I\n\x1brepeated_sfixed64_extension\x12$.protobuf_unittest.TestAllExtensions\x18( \x03(\x10:F\n\x18repeated_float_extension\x12$.protobuf_unittest.TestAllExtensions\x18) \x03(\x02:G\n\x19repeated_double_extension\x12$.protobuf_unittest.TestAllExtensions\x18* \x03(\x01:E\n\x17repeated_bool_extension\x12$.protobuf_unittest.TestAllExtensions\x18+ \x03(\x08:G\n\x19repeated_string_extension\x12$.protobuf_unittest.TestAllExtensions\x18, \x03(\t:F\n\x18repeated_bytes_extension\x12$.protobuf_unittest.TestAllExtensions\x18- \x03(\x0c:q\n\x17repeatedgroup_extension\x12$.protobuf_unittest.TestAllExtensions\x18. \x03(\n2*.protobuf_unittest.RepeatedGroup_extension:~\n!repeated_nested_message_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x30 \x03(\x0b\x32-.protobuf_unittest.TestAllTypes.NestedMessage:s\n\"repeated_foreign_message_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x31 \x03(\x0b\x32!.protobuf_unittest.ForeignMessage:x\n!repeated_import_message_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x32 \x03(\x0b\x32\'.protobuf_unittest_import.ImportMessage:x\n\x1erepeated_nested_enum_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x33 \x03(\x0e\x32*.protobuf_unittest.TestAllTypes.NestedEnum:m\n\x1frepeated_foreign_enum_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x34 \x03(\x0e\x32\x1e.protobuf_unittest.ForeignEnum:r\n\x1erepeated_import_enum_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x35 \x03(\x0e\x32$.protobuf_unittest_import.ImportEnum:Q\n\x1frepeated_string_piece_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x36 \x03(\tB\x02\x08\x02:I\n\x17repeated_cord_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x37 \x03(\tB\x02\x08\x01:\x80\x01\n\x1frepeated_lazy_message_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x39 \x03(\x0b\x32-.protobuf_unittest.TestAllTypes.NestedMessageB\x02(\x01:I\n\x17\x64\x65\x66\x61ult_int32_extension\x12$.protobuf_unittest.TestAllExtensions\x18= \x01(\x05:\x02\x34\x31:I\n\x17\x64\x65\x66\x61ult_int64_extension\x12$.protobuf_unittest.TestAllExtensions\x18> \x01(\x03:\x02\x34\x32:J\n\x18\x64\x65\x66\x61ult_uint32_extension\x12$.protobuf_unittest.TestAllExtensions\x18? \x01(\r:\x02\x34\x33:J\n\x18\x64\x65\x66\x61ult_uint64_extension\x12$.protobuf_unittest.TestAllExtensions\x18@ \x01(\x04:\x02\x34\x34:K\n\x18\x64\x65\x66\x61ult_sint32_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x41 \x01(\x11:\x03-45:J\n\x18\x64\x65\x66\x61ult_sint64_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x42 \x01(\x12:\x02\x34\x36:K\n\x19\x64\x65\x66\x61ult_fixed32_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x43 \x01(\x07:\x02\x34\x37:K\n\x19\x64\x65\x66\x61ult_fixed64_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x44 \x01(\x06:\x02\x34\x38:L\n\x1a\x64\x65\x66\x61ult_sfixed32_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x45 \x01(\x0f:\x02\x34\x39:M\n\x1a\x64\x65\x66\x61ult_sfixed64_extension\x12$.protobuf_unittest.TestAllExtensions\x18\x46 \x01(\x10:\x03-50:K\n\x17\x64\x65\x66\x61ult_float_extension\x12$.protobuf_unittest.TestAllExtensions\x18G \x01(\x02:\x04\x35\x31.5:M\n\x18\x64\x65\x66\x61ult_double_extension\x12$.protobuf_unittest.TestAllExtensions\x18H \x01(\x01:\x05\x35\x32\x30\x30\x30:J\n\x16\x64\x65\x66\x61ult_bool_extension\x12$.protobuf_unittest.TestAllExtensions\x18I \x01(\x08:\x04true:M\n\x18\x64\x65\x66\x61ult_string_extension\x12$.protobuf_unittest.TestAllExtensions\x18J \x01(\t:\x05hello:L\n\x17\x64\x65\x66\x61ult_bytes_extension\x12$.protobuf_unittest.TestAllExtensions\x18K \x01(\x0c:\x05world:|\n\x1d\x64\x65\x66\x61ult_nested_enum_extension\x12$.protobuf_unittest.TestAllExtensions\x18Q \x01(\x0e\x32*.protobuf_unittest.TestAllTypes.NestedEnum:\x03\x42\x41R:y\n\x1e\x64\x65\x66\x61ult_foreign_enum_extension\x12$.protobuf_unittest.TestAllExtensions\x18R \x01(\x0e\x32\x1e.protobuf_unittest.ForeignEnum:\x0b\x46OREIGN_BAR:}\n\x1d\x64\x65\x66\x61ult_import_enum_extension\x12$.protobuf_unittest.TestAllExtensions\x18S \x01(\x0e\x32$.protobuf_unittest_import.ImportEnum:\nIMPORT_BAR:U\n\x1e\x64\x65\x66\x61ult_string_piece_extension\x12$.protobuf_unittest.TestAllExtensions\x18T \x01(\t:\x03\x61\x62\x63\x42\x02\x08\x02:M\n\x16\x64\x65\x66\x61ult_cord_extension\x12$.protobuf_unittest.TestAllExtensions\x18U \x01(\t:\x03\x31\x32\x33\x42\x02\x08\x01:B\n\x13my_extension_string\x12%.protobuf_unittest.TestFieldOrderings\x18\x32 \x01(\t:?\n\x10my_extension_int\x12%.protobuf_unittest.TestFieldOrderings\x18\x05 \x01(\x05:K\n\x16packed_int32_extension\x12\'.protobuf_unittest.TestPackedExtensions\x18Z \x03(\x05\x42\x02\x10\x01:K\n\x16packed_int64_extension\x12\'.protobuf_unittest.TestPackedExtensions\x18[ \x03(\x03\x42\x02\x10\x01:L\n\x17packed_uint32_extension\x12\'.protobuf_unittest.TestPackedExtensions\x18\\ \x03(\rB\x02\x10\x01:L\n\x17packed_uint64_extension\x12\'.protobuf_unittest.TestPackedExtensions\x18] \x03(\x04\x42\x02\x10\x01:L\n\x17packed_sint32_extension\x12\'.protobuf_unittest.TestPackedExtensions\x18^ \x03(\x11\x42\x02\x10\x01:L\n\x17packed_sint64_extension\x12\'.protobuf_unittest.TestPackedExtensions\x18_ \x03(\x12\x42\x02\x10\x01:M\n\x18packed_fixed32_extension\x12\'.protobuf_unittest.TestPackedExtensions\x18` \x03(\x07\x42\x02\x10\x01:M\n\x18packed_fixed64_extension\x12\'.protobuf_unittest.TestPackedExtensions\x18\x61 \x03(\x06\x42\x02\x10\x01:N\n\x19packed_sfixed32_extension\x12\'.protobuf_unittest.TestPackedExtensions\x18\x62 \x03(\x0f\x42\x02\x10\x01:N\n\x19packed_sfixed64_extension\x12\'.protobuf_unittest.TestPackedExtensions\x18\x63 \x03(\x10\x42\x02\x10\x01:K\n\x16packed_float_extension\x12\'.protobuf_unittest.TestPackedExtensions\x18\x64 \x03(\x02\x42\x02\x10\x01:L\n\x17packed_double_extension\x12\'.protobuf_unittest.TestPackedExtensions\x18\x65 \x03(\x01\x42\x02\x10\x01:J\n\x15packed_bool_extension\x12\'.protobuf_unittest.TestPackedExtensions\x18\x66 \x03(\x08\x42\x02\x10\x01:j\n\x15packed_enum_extension\x12\'.protobuf_unittest.TestPackedExtensions\x18g \x03(\x0e\x32\x1e.protobuf_unittest.ForeignEnumB\x02\x10\x01\x42\x1a\x42\rUnittestProtoH\x01\x80\x01\x01\x88\x01\x01\x90\x01\x01') + +_FOREIGNENUM = _descriptor.EnumDescriptor( + name='ForeignEnum', + full_name='protobuf_unittest.ForeignEnum', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='FOREIGN_FOO', index=0, number=4, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='FOREIGN_BAR', index=1, number=5, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='FOREIGN_BAZ', index=2, number=6, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=10149, + serialized_end=10213, +) + +ForeignEnum = enum_type_wrapper.EnumTypeWrapper(_FOREIGNENUM) +_TESTENUMWITHDUPVALUE = _descriptor.EnumDescriptor( + name='TestEnumWithDupValue', + full_name='protobuf_unittest.TestEnumWithDupValue', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='FOO1', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='BAR1', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='BAZ', index=2, number=3, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='FOO2', index=3, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='BAR2', index=4, number=2, + options=None, + type=None), + ], + containing_type=None, + options=_descriptor._ParseOptions(descriptor_pb2.EnumOptions(), '\020\001'), + serialized_start=10215, + serialized_end=10290, +) + +TestEnumWithDupValue = enum_type_wrapper.EnumTypeWrapper(_TESTENUMWITHDUPVALUE) +_TESTSPARSEENUM = _descriptor.EnumDescriptor( + name='TestSparseEnum', + full_name='protobuf_unittest.TestSparseEnum', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='SPARSE_A', index=0, number=123, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SPARSE_B', index=1, number=62374, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SPARSE_C', index=2, number=12589234, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SPARSE_D', index=3, number=-15, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SPARSE_E', index=4, number=-53452, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SPARSE_F', index=5, number=0, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='SPARSE_G', index=6, number=2, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=10293, + serialized_end=10430, +) + +TestSparseEnum = enum_type_wrapper.EnumTypeWrapper(_TESTSPARSEENUM) +FOREIGN_FOO = 4 +FOREIGN_BAR = 5 +FOREIGN_BAZ = 6 +FOO1 = 1 +BAR1 = 2 +BAZ = 3 +FOO2 = 1 +BAR2 = 2 +SPARSE_A = 123 +SPARSE_B = 62374 +SPARSE_C = 12589234 +SPARSE_D = -15 +SPARSE_E = -53452 +SPARSE_F = 0 +SPARSE_G = 2 + +OPTIONAL_INT32_EXTENSION_FIELD_NUMBER = 1 +optional_int32_extension = _descriptor.FieldDescriptor( + name='optional_int32_extension', full_name='protobuf_unittest.optional_int32_extension', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_INT64_EXTENSION_FIELD_NUMBER = 2 +optional_int64_extension = _descriptor.FieldDescriptor( + name='optional_int64_extension', full_name='protobuf_unittest.optional_int64_extension', index=1, + number=2, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_UINT32_EXTENSION_FIELD_NUMBER = 3 +optional_uint32_extension = _descriptor.FieldDescriptor( + name='optional_uint32_extension', full_name='protobuf_unittest.optional_uint32_extension', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_UINT64_EXTENSION_FIELD_NUMBER = 4 +optional_uint64_extension = _descriptor.FieldDescriptor( + name='optional_uint64_extension', full_name='protobuf_unittest.optional_uint64_extension', index=3, + number=4, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_SINT32_EXTENSION_FIELD_NUMBER = 5 +optional_sint32_extension = _descriptor.FieldDescriptor( + name='optional_sint32_extension', full_name='protobuf_unittest.optional_sint32_extension', index=4, + number=5, type=17, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_SINT64_EXTENSION_FIELD_NUMBER = 6 +optional_sint64_extension = _descriptor.FieldDescriptor( + name='optional_sint64_extension', full_name='protobuf_unittest.optional_sint64_extension', index=5, + number=6, type=18, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_FIXED32_EXTENSION_FIELD_NUMBER = 7 +optional_fixed32_extension = _descriptor.FieldDescriptor( + name='optional_fixed32_extension', full_name='protobuf_unittest.optional_fixed32_extension', index=6, + number=7, type=7, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_FIXED64_EXTENSION_FIELD_NUMBER = 8 +optional_fixed64_extension = _descriptor.FieldDescriptor( + name='optional_fixed64_extension', full_name='protobuf_unittest.optional_fixed64_extension', index=7, + number=8, type=6, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_SFIXED32_EXTENSION_FIELD_NUMBER = 9 +optional_sfixed32_extension = _descriptor.FieldDescriptor( + name='optional_sfixed32_extension', full_name='protobuf_unittest.optional_sfixed32_extension', index=8, + number=9, type=15, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_SFIXED64_EXTENSION_FIELD_NUMBER = 10 +optional_sfixed64_extension = _descriptor.FieldDescriptor( + name='optional_sfixed64_extension', full_name='protobuf_unittest.optional_sfixed64_extension', index=9, + number=10, type=16, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_FLOAT_EXTENSION_FIELD_NUMBER = 11 +optional_float_extension = _descriptor.FieldDescriptor( + name='optional_float_extension', full_name='protobuf_unittest.optional_float_extension', index=10, + number=11, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_DOUBLE_EXTENSION_FIELD_NUMBER = 12 +optional_double_extension = _descriptor.FieldDescriptor( + name='optional_double_extension', full_name='protobuf_unittest.optional_double_extension', index=11, + number=12, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_BOOL_EXTENSION_FIELD_NUMBER = 13 +optional_bool_extension = _descriptor.FieldDescriptor( + name='optional_bool_extension', full_name='protobuf_unittest.optional_bool_extension', index=12, + number=13, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_STRING_EXTENSION_FIELD_NUMBER = 14 +optional_string_extension = _descriptor.FieldDescriptor( + name='optional_string_extension', full_name='protobuf_unittest.optional_string_extension', index=13, + number=14, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_BYTES_EXTENSION_FIELD_NUMBER = 15 +optional_bytes_extension = _descriptor.FieldDescriptor( + name='optional_bytes_extension', full_name='protobuf_unittest.optional_bytes_extension', index=14, + number=15, type=12, cpp_type=9, label=1, + has_default_value=False, default_value="", + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONALGROUP_EXTENSION_FIELD_NUMBER = 16 +optionalgroup_extension = _descriptor.FieldDescriptor( + name='optionalgroup_extension', full_name='protobuf_unittest.optionalgroup_extension', index=15, + number=16, type=10, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_NESTED_MESSAGE_EXTENSION_FIELD_NUMBER = 18 +optional_nested_message_extension = _descriptor.FieldDescriptor( + name='optional_nested_message_extension', full_name='protobuf_unittest.optional_nested_message_extension', index=16, + number=18, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_FOREIGN_MESSAGE_EXTENSION_FIELD_NUMBER = 19 +optional_foreign_message_extension = _descriptor.FieldDescriptor( + name='optional_foreign_message_extension', full_name='protobuf_unittest.optional_foreign_message_extension', index=17, + number=19, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_IMPORT_MESSAGE_EXTENSION_FIELD_NUMBER = 20 +optional_import_message_extension = _descriptor.FieldDescriptor( + name='optional_import_message_extension', full_name='protobuf_unittest.optional_import_message_extension', index=18, + number=20, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_NESTED_ENUM_EXTENSION_FIELD_NUMBER = 21 +optional_nested_enum_extension = _descriptor.FieldDescriptor( + name='optional_nested_enum_extension', full_name='protobuf_unittest.optional_nested_enum_extension', index=19, + number=21, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_FOREIGN_ENUM_EXTENSION_FIELD_NUMBER = 22 +optional_foreign_enum_extension = _descriptor.FieldDescriptor( + name='optional_foreign_enum_extension', full_name='protobuf_unittest.optional_foreign_enum_extension', index=20, + number=22, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=4, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_IMPORT_ENUM_EXTENSION_FIELD_NUMBER = 23 +optional_import_enum_extension = _descriptor.FieldDescriptor( + name='optional_import_enum_extension', full_name='protobuf_unittest.optional_import_enum_extension', index=21, + number=23, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=7, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_STRING_PIECE_EXTENSION_FIELD_NUMBER = 24 +optional_string_piece_extension = _descriptor.FieldDescriptor( + name='optional_string_piece_extension', full_name='protobuf_unittest.optional_string_piece_extension', index=22, + number=24, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002')) +OPTIONAL_CORD_EXTENSION_FIELD_NUMBER = 25 +optional_cord_extension = _descriptor.FieldDescriptor( + name='optional_cord_extension', full_name='protobuf_unittest.optional_cord_extension', index=23, + number=25, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001')) +OPTIONAL_PUBLIC_IMPORT_MESSAGE_EXTENSION_FIELD_NUMBER = 26 +optional_public_import_message_extension = _descriptor.FieldDescriptor( + name='optional_public_import_message_extension', full_name='protobuf_unittest.optional_public_import_message_extension', index=24, + number=26, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +OPTIONAL_LAZY_MESSAGE_EXTENSION_FIELD_NUMBER = 27 +optional_lazy_message_extension = _descriptor.FieldDescriptor( + name='optional_lazy_message_extension', full_name='protobuf_unittest.optional_lazy_message_extension', index=25, + number=27, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '(\001')) +REPEATED_INT32_EXTENSION_FIELD_NUMBER = 31 +repeated_int32_extension = _descriptor.FieldDescriptor( + name='repeated_int32_extension', full_name='protobuf_unittest.repeated_int32_extension', index=26, + number=31, type=5, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_INT64_EXTENSION_FIELD_NUMBER = 32 +repeated_int64_extension = _descriptor.FieldDescriptor( + name='repeated_int64_extension', full_name='protobuf_unittest.repeated_int64_extension', index=27, + number=32, type=3, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_UINT32_EXTENSION_FIELD_NUMBER = 33 +repeated_uint32_extension = _descriptor.FieldDescriptor( + name='repeated_uint32_extension', full_name='protobuf_unittest.repeated_uint32_extension', index=28, + number=33, type=13, cpp_type=3, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_UINT64_EXTENSION_FIELD_NUMBER = 34 +repeated_uint64_extension = _descriptor.FieldDescriptor( + name='repeated_uint64_extension', full_name='protobuf_unittest.repeated_uint64_extension', index=29, + number=34, type=4, cpp_type=4, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_SINT32_EXTENSION_FIELD_NUMBER = 35 +repeated_sint32_extension = _descriptor.FieldDescriptor( + name='repeated_sint32_extension', full_name='protobuf_unittest.repeated_sint32_extension', index=30, + number=35, type=17, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_SINT64_EXTENSION_FIELD_NUMBER = 36 +repeated_sint64_extension = _descriptor.FieldDescriptor( + name='repeated_sint64_extension', full_name='protobuf_unittest.repeated_sint64_extension', index=31, + number=36, type=18, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_FIXED32_EXTENSION_FIELD_NUMBER = 37 +repeated_fixed32_extension = _descriptor.FieldDescriptor( + name='repeated_fixed32_extension', full_name='protobuf_unittest.repeated_fixed32_extension', index=32, + number=37, type=7, cpp_type=3, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_FIXED64_EXTENSION_FIELD_NUMBER = 38 +repeated_fixed64_extension = _descriptor.FieldDescriptor( + name='repeated_fixed64_extension', full_name='protobuf_unittest.repeated_fixed64_extension', index=33, + number=38, type=6, cpp_type=4, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_SFIXED32_EXTENSION_FIELD_NUMBER = 39 +repeated_sfixed32_extension = _descriptor.FieldDescriptor( + name='repeated_sfixed32_extension', full_name='protobuf_unittest.repeated_sfixed32_extension', index=34, + number=39, type=15, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_SFIXED64_EXTENSION_FIELD_NUMBER = 40 +repeated_sfixed64_extension = _descriptor.FieldDescriptor( + name='repeated_sfixed64_extension', full_name='protobuf_unittest.repeated_sfixed64_extension', index=35, + number=40, type=16, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_FLOAT_EXTENSION_FIELD_NUMBER = 41 +repeated_float_extension = _descriptor.FieldDescriptor( + name='repeated_float_extension', full_name='protobuf_unittest.repeated_float_extension', index=36, + number=41, type=2, cpp_type=6, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_DOUBLE_EXTENSION_FIELD_NUMBER = 42 +repeated_double_extension = _descriptor.FieldDescriptor( + name='repeated_double_extension', full_name='protobuf_unittest.repeated_double_extension', index=37, + number=42, type=1, cpp_type=5, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_BOOL_EXTENSION_FIELD_NUMBER = 43 +repeated_bool_extension = _descriptor.FieldDescriptor( + name='repeated_bool_extension', full_name='protobuf_unittest.repeated_bool_extension', index=38, + number=43, type=8, cpp_type=7, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_STRING_EXTENSION_FIELD_NUMBER = 44 +repeated_string_extension = _descriptor.FieldDescriptor( + name='repeated_string_extension', full_name='protobuf_unittest.repeated_string_extension', index=39, + number=44, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_BYTES_EXTENSION_FIELD_NUMBER = 45 +repeated_bytes_extension = _descriptor.FieldDescriptor( + name='repeated_bytes_extension', full_name='protobuf_unittest.repeated_bytes_extension', index=40, + number=45, type=12, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATEDGROUP_EXTENSION_FIELD_NUMBER = 46 +repeatedgroup_extension = _descriptor.FieldDescriptor( + name='repeatedgroup_extension', full_name='protobuf_unittest.repeatedgroup_extension', index=41, + number=46, type=10, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_NESTED_MESSAGE_EXTENSION_FIELD_NUMBER = 48 +repeated_nested_message_extension = _descriptor.FieldDescriptor( + name='repeated_nested_message_extension', full_name='protobuf_unittest.repeated_nested_message_extension', index=42, + number=48, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_FOREIGN_MESSAGE_EXTENSION_FIELD_NUMBER = 49 +repeated_foreign_message_extension = _descriptor.FieldDescriptor( + name='repeated_foreign_message_extension', full_name='protobuf_unittest.repeated_foreign_message_extension', index=43, + number=49, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_IMPORT_MESSAGE_EXTENSION_FIELD_NUMBER = 50 +repeated_import_message_extension = _descriptor.FieldDescriptor( + name='repeated_import_message_extension', full_name='protobuf_unittest.repeated_import_message_extension', index=44, + number=50, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_NESTED_ENUM_EXTENSION_FIELD_NUMBER = 51 +repeated_nested_enum_extension = _descriptor.FieldDescriptor( + name='repeated_nested_enum_extension', full_name='protobuf_unittest.repeated_nested_enum_extension', index=45, + number=51, type=14, cpp_type=8, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_FOREIGN_ENUM_EXTENSION_FIELD_NUMBER = 52 +repeated_foreign_enum_extension = _descriptor.FieldDescriptor( + name='repeated_foreign_enum_extension', full_name='protobuf_unittest.repeated_foreign_enum_extension', index=46, + number=52, type=14, cpp_type=8, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_IMPORT_ENUM_EXTENSION_FIELD_NUMBER = 53 +repeated_import_enum_extension = _descriptor.FieldDescriptor( + name='repeated_import_enum_extension', full_name='protobuf_unittest.repeated_import_enum_extension', index=47, + number=53, type=14, cpp_type=8, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +REPEATED_STRING_PIECE_EXTENSION_FIELD_NUMBER = 54 +repeated_string_piece_extension = _descriptor.FieldDescriptor( + name='repeated_string_piece_extension', full_name='protobuf_unittest.repeated_string_piece_extension', index=48, + number=54, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002')) +REPEATED_CORD_EXTENSION_FIELD_NUMBER = 55 +repeated_cord_extension = _descriptor.FieldDescriptor( + name='repeated_cord_extension', full_name='protobuf_unittest.repeated_cord_extension', index=49, + number=55, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001')) +REPEATED_LAZY_MESSAGE_EXTENSION_FIELD_NUMBER = 57 +repeated_lazy_message_extension = _descriptor.FieldDescriptor( + name='repeated_lazy_message_extension', full_name='protobuf_unittest.repeated_lazy_message_extension', index=50, + number=57, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '(\001')) +DEFAULT_INT32_EXTENSION_FIELD_NUMBER = 61 +default_int32_extension = _descriptor.FieldDescriptor( + name='default_int32_extension', full_name='protobuf_unittest.default_int32_extension', index=51, + number=61, type=5, cpp_type=1, label=1, + has_default_value=True, default_value=41, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_INT64_EXTENSION_FIELD_NUMBER = 62 +default_int64_extension = _descriptor.FieldDescriptor( + name='default_int64_extension', full_name='protobuf_unittest.default_int64_extension', index=52, + number=62, type=3, cpp_type=2, label=1, + has_default_value=True, default_value=42, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_UINT32_EXTENSION_FIELD_NUMBER = 63 +default_uint32_extension = _descriptor.FieldDescriptor( + name='default_uint32_extension', full_name='protobuf_unittest.default_uint32_extension', index=53, + number=63, type=13, cpp_type=3, label=1, + has_default_value=True, default_value=43, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_UINT64_EXTENSION_FIELD_NUMBER = 64 +default_uint64_extension = _descriptor.FieldDescriptor( + name='default_uint64_extension', full_name='protobuf_unittest.default_uint64_extension', index=54, + number=64, type=4, cpp_type=4, label=1, + has_default_value=True, default_value=44, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_SINT32_EXTENSION_FIELD_NUMBER = 65 +default_sint32_extension = _descriptor.FieldDescriptor( + name='default_sint32_extension', full_name='protobuf_unittest.default_sint32_extension', index=55, + number=65, type=17, cpp_type=1, label=1, + has_default_value=True, default_value=-45, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_SINT64_EXTENSION_FIELD_NUMBER = 66 +default_sint64_extension = _descriptor.FieldDescriptor( + name='default_sint64_extension', full_name='protobuf_unittest.default_sint64_extension', index=56, + number=66, type=18, cpp_type=2, label=1, + has_default_value=True, default_value=46, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_FIXED32_EXTENSION_FIELD_NUMBER = 67 +default_fixed32_extension = _descriptor.FieldDescriptor( + name='default_fixed32_extension', full_name='protobuf_unittest.default_fixed32_extension', index=57, + number=67, type=7, cpp_type=3, label=1, + has_default_value=True, default_value=47, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_FIXED64_EXTENSION_FIELD_NUMBER = 68 +default_fixed64_extension = _descriptor.FieldDescriptor( + name='default_fixed64_extension', full_name='protobuf_unittest.default_fixed64_extension', index=58, + number=68, type=6, cpp_type=4, label=1, + has_default_value=True, default_value=48, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_SFIXED32_EXTENSION_FIELD_NUMBER = 69 +default_sfixed32_extension = _descriptor.FieldDescriptor( + name='default_sfixed32_extension', full_name='protobuf_unittest.default_sfixed32_extension', index=59, + number=69, type=15, cpp_type=1, label=1, + has_default_value=True, default_value=49, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_SFIXED64_EXTENSION_FIELD_NUMBER = 70 +default_sfixed64_extension = _descriptor.FieldDescriptor( + name='default_sfixed64_extension', full_name='protobuf_unittest.default_sfixed64_extension', index=60, + number=70, type=16, cpp_type=2, label=1, + has_default_value=True, default_value=-50, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_FLOAT_EXTENSION_FIELD_NUMBER = 71 +default_float_extension = _descriptor.FieldDescriptor( + name='default_float_extension', full_name='protobuf_unittest.default_float_extension', index=61, + number=71, type=2, cpp_type=6, label=1, + has_default_value=True, default_value=51.5, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_DOUBLE_EXTENSION_FIELD_NUMBER = 72 +default_double_extension = _descriptor.FieldDescriptor( + name='default_double_extension', full_name='protobuf_unittest.default_double_extension', index=62, + number=72, type=1, cpp_type=5, label=1, + has_default_value=True, default_value=52000, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_BOOL_EXTENSION_FIELD_NUMBER = 73 +default_bool_extension = _descriptor.FieldDescriptor( + name='default_bool_extension', full_name='protobuf_unittest.default_bool_extension', index=63, + number=73, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=True, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_STRING_EXTENSION_FIELD_NUMBER = 74 +default_string_extension = _descriptor.FieldDescriptor( + name='default_string_extension', full_name='protobuf_unittest.default_string_extension', index=64, + number=74, type=9, cpp_type=9, label=1, + has_default_value=True, default_value=unicode("hello", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_BYTES_EXTENSION_FIELD_NUMBER = 75 +default_bytes_extension = _descriptor.FieldDescriptor( + name='default_bytes_extension', full_name='protobuf_unittest.default_bytes_extension', index=65, + number=75, type=12, cpp_type=9, label=1, + has_default_value=True, default_value="world", + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_NESTED_ENUM_EXTENSION_FIELD_NUMBER = 81 +default_nested_enum_extension = _descriptor.FieldDescriptor( + name='default_nested_enum_extension', full_name='protobuf_unittest.default_nested_enum_extension', index=66, + number=81, type=14, cpp_type=8, label=1, + has_default_value=True, default_value=2, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_FOREIGN_ENUM_EXTENSION_FIELD_NUMBER = 82 +default_foreign_enum_extension = _descriptor.FieldDescriptor( + name='default_foreign_enum_extension', full_name='protobuf_unittest.default_foreign_enum_extension', index=67, + number=82, type=14, cpp_type=8, label=1, + has_default_value=True, default_value=5, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_IMPORT_ENUM_EXTENSION_FIELD_NUMBER = 83 +default_import_enum_extension = _descriptor.FieldDescriptor( + name='default_import_enum_extension', full_name='protobuf_unittest.default_import_enum_extension', index=68, + number=83, type=14, cpp_type=8, label=1, + has_default_value=True, default_value=8, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +DEFAULT_STRING_PIECE_EXTENSION_FIELD_NUMBER = 84 +default_string_piece_extension = _descriptor.FieldDescriptor( + name='default_string_piece_extension', full_name='protobuf_unittest.default_string_piece_extension', index=69, + number=84, type=9, cpp_type=9, label=1, + has_default_value=True, default_value=unicode("abc", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002')) +DEFAULT_CORD_EXTENSION_FIELD_NUMBER = 85 +default_cord_extension = _descriptor.FieldDescriptor( + name='default_cord_extension', full_name='protobuf_unittest.default_cord_extension', index=70, + number=85, type=9, cpp_type=9, label=1, + has_default_value=True, default_value=unicode("123", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001')) +MY_EXTENSION_STRING_FIELD_NUMBER = 50 +my_extension_string = _descriptor.FieldDescriptor( + name='my_extension_string', full_name='protobuf_unittest.my_extension_string', index=71, + number=50, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +MY_EXTENSION_INT_FIELD_NUMBER = 5 +my_extension_int = _descriptor.FieldDescriptor( + name='my_extension_int', full_name='protobuf_unittest.my_extension_int', index=72, + number=5, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None) +PACKED_INT32_EXTENSION_FIELD_NUMBER = 90 +packed_int32_extension = _descriptor.FieldDescriptor( + name='packed_int32_extension', full_name='protobuf_unittest.packed_int32_extension', index=73, + number=90, type=5, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')) +PACKED_INT64_EXTENSION_FIELD_NUMBER = 91 +packed_int64_extension = _descriptor.FieldDescriptor( + name='packed_int64_extension', full_name='protobuf_unittest.packed_int64_extension', index=74, + number=91, type=3, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')) +PACKED_UINT32_EXTENSION_FIELD_NUMBER = 92 +packed_uint32_extension = _descriptor.FieldDescriptor( + name='packed_uint32_extension', full_name='protobuf_unittest.packed_uint32_extension', index=75, + number=92, type=13, cpp_type=3, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')) +PACKED_UINT64_EXTENSION_FIELD_NUMBER = 93 +packed_uint64_extension = _descriptor.FieldDescriptor( + name='packed_uint64_extension', full_name='protobuf_unittest.packed_uint64_extension', index=76, + number=93, type=4, cpp_type=4, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')) +PACKED_SINT32_EXTENSION_FIELD_NUMBER = 94 +packed_sint32_extension = _descriptor.FieldDescriptor( + name='packed_sint32_extension', full_name='protobuf_unittest.packed_sint32_extension', index=77, + number=94, type=17, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')) +PACKED_SINT64_EXTENSION_FIELD_NUMBER = 95 +packed_sint64_extension = _descriptor.FieldDescriptor( + name='packed_sint64_extension', full_name='protobuf_unittest.packed_sint64_extension', index=78, + number=95, type=18, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')) +PACKED_FIXED32_EXTENSION_FIELD_NUMBER = 96 +packed_fixed32_extension = _descriptor.FieldDescriptor( + name='packed_fixed32_extension', full_name='protobuf_unittest.packed_fixed32_extension', index=79, + number=96, type=7, cpp_type=3, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')) +PACKED_FIXED64_EXTENSION_FIELD_NUMBER = 97 +packed_fixed64_extension = _descriptor.FieldDescriptor( + name='packed_fixed64_extension', full_name='protobuf_unittest.packed_fixed64_extension', index=80, + number=97, type=6, cpp_type=4, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')) +PACKED_SFIXED32_EXTENSION_FIELD_NUMBER = 98 +packed_sfixed32_extension = _descriptor.FieldDescriptor( + name='packed_sfixed32_extension', full_name='protobuf_unittest.packed_sfixed32_extension', index=81, + number=98, type=15, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')) +PACKED_SFIXED64_EXTENSION_FIELD_NUMBER = 99 +packed_sfixed64_extension = _descriptor.FieldDescriptor( + name='packed_sfixed64_extension', full_name='protobuf_unittest.packed_sfixed64_extension', index=82, + number=99, type=16, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')) +PACKED_FLOAT_EXTENSION_FIELD_NUMBER = 100 +packed_float_extension = _descriptor.FieldDescriptor( + name='packed_float_extension', full_name='protobuf_unittest.packed_float_extension', index=83, + number=100, type=2, cpp_type=6, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')) +PACKED_DOUBLE_EXTENSION_FIELD_NUMBER = 101 +packed_double_extension = _descriptor.FieldDescriptor( + name='packed_double_extension', full_name='protobuf_unittest.packed_double_extension', index=84, + number=101, type=1, cpp_type=5, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')) +PACKED_BOOL_EXTENSION_FIELD_NUMBER = 102 +packed_bool_extension = _descriptor.FieldDescriptor( + name='packed_bool_extension', full_name='protobuf_unittest.packed_bool_extension', index=85, + number=102, type=8, cpp_type=7, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')) +PACKED_ENUM_EXTENSION_FIELD_NUMBER = 103 +packed_enum_extension = _descriptor.FieldDescriptor( + name='packed_enum_extension', full_name='protobuf_unittest.packed_enum_extension', index=86, + number=103, type=14, cpp_type=8, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')) + +_TESTALLTYPES_NESTEDENUM = _descriptor.EnumDescriptor( + name='NestedEnum', + full_name='protobuf_unittest.TestAllTypes.NestedEnum', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='FOO', index=0, number=1, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='BAR', index=1, number=2, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='BAZ', index=2, number=3, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=3052, + serialized_end=3091, +) + +_TESTDYNAMICEXTENSIONS_DYNAMICENUMTYPE = _descriptor.EnumDescriptor( + name='DynamicEnumType', + full_name='protobuf_unittest.TestDynamicExtensions.DynamicEnumType', + filename=None, + file=DESCRIPTOR, + values=[ + _descriptor.EnumValueDescriptor( + name='DYNAMIC_FOO', index=0, number=2200, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='DYNAMIC_BAR', index=1, number=2201, + options=None, + type=None), + _descriptor.EnumValueDescriptor( + name='DYNAMIC_BAZ', index=2, number=2202, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=8439, + serialized_end=8510, +) + + +_TESTALLTYPES_NESTEDMESSAGE = _descriptor.Descriptor( + name='NestedMessage', + full_name='protobuf_unittest.TestAllTypes.NestedMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='bb', full_name='protobuf_unittest.TestAllTypes.NestedMessage.bb', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=2967, + serialized_end=2994, +) + +_TESTALLTYPES_OPTIONALGROUP = _descriptor.Descriptor( + name='OptionalGroup', + full_name='protobuf_unittest.TestAllTypes.OptionalGroup', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='a', full_name='protobuf_unittest.TestAllTypes.OptionalGroup.a', index=0, + number=17, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=2996, + serialized_end=3022, +) + +_TESTALLTYPES_REPEATEDGROUP = _descriptor.Descriptor( + name='RepeatedGroup', + full_name='protobuf_unittest.TestAllTypes.RepeatedGroup', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='a', full_name='protobuf_unittest.TestAllTypes.RepeatedGroup.a', index=0, + number=47, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=3024, + serialized_end=3050, +) + +_TESTALLTYPES = _descriptor.Descriptor( + name='TestAllTypes', + full_name='protobuf_unittest.TestAllTypes', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='optional_int32', full_name='protobuf_unittest.TestAllTypes.optional_int32', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_int64', full_name='protobuf_unittest.TestAllTypes.optional_int64', index=1, + number=2, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_uint32', full_name='protobuf_unittest.TestAllTypes.optional_uint32', index=2, + number=3, type=13, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_uint64', full_name='protobuf_unittest.TestAllTypes.optional_uint64', index=3, + number=4, type=4, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_sint32', full_name='protobuf_unittest.TestAllTypes.optional_sint32', index=4, + number=5, type=17, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_sint64', full_name='protobuf_unittest.TestAllTypes.optional_sint64', index=5, + number=6, type=18, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_fixed32', full_name='protobuf_unittest.TestAllTypes.optional_fixed32', index=6, + number=7, type=7, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_fixed64', full_name='protobuf_unittest.TestAllTypes.optional_fixed64', index=7, + number=8, type=6, cpp_type=4, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_sfixed32', full_name='protobuf_unittest.TestAllTypes.optional_sfixed32', index=8, + number=9, type=15, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_sfixed64', full_name='protobuf_unittest.TestAllTypes.optional_sfixed64', index=9, + number=10, type=16, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_float', full_name='protobuf_unittest.TestAllTypes.optional_float', index=10, + number=11, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_double', full_name='protobuf_unittest.TestAllTypes.optional_double', index=11, + number=12, type=1, cpp_type=5, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_bool', full_name='protobuf_unittest.TestAllTypes.optional_bool', index=12, + number=13, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_string', full_name='protobuf_unittest.TestAllTypes.optional_string', index=13, + number=14, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_bytes', full_name='protobuf_unittest.TestAllTypes.optional_bytes', index=14, + number=15, type=12, cpp_type=9, label=1, + has_default_value=False, default_value="", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optionalgroup', full_name='protobuf_unittest.TestAllTypes.optionalgroup', index=15, + number=16, type=10, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_nested_message', full_name='protobuf_unittest.TestAllTypes.optional_nested_message', index=16, + number=18, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_foreign_message', full_name='protobuf_unittest.TestAllTypes.optional_foreign_message', index=17, + number=19, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_import_message', full_name='protobuf_unittest.TestAllTypes.optional_import_message', index=18, + number=20, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_nested_enum', full_name='protobuf_unittest.TestAllTypes.optional_nested_enum', index=19, + number=21, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_foreign_enum', full_name='protobuf_unittest.TestAllTypes.optional_foreign_enum', index=20, + number=22, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=4, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_import_enum', full_name='protobuf_unittest.TestAllTypes.optional_import_enum', index=21, + number=23, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=7, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_string_piece', full_name='protobuf_unittest.TestAllTypes.optional_string_piece', index=22, + number=24, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002')), + _descriptor.FieldDescriptor( + name='optional_cord', full_name='protobuf_unittest.TestAllTypes.optional_cord', index=23, + number=25, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001')), + _descriptor.FieldDescriptor( + name='optional_public_import_message', full_name='protobuf_unittest.TestAllTypes.optional_public_import_message', index=24, + number=26, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_lazy_message', full_name='protobuf_unittest.TestAllTypes.optional_lazy_message', index=25, + number=27, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '(\001')), + _descriptor.FieldDescriptor( + name='repeated_int32', full_name='protobuf_unittest.TestAllTypes.repeated_int32', index=26, + number=31, type=5, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_int64', full_name='protobuf_unittest.TestAllTypes.repeated_int64', index=27, + number=32, type=3, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_uint32', full_name='protobuf_unittest.TestAllTypes.repeated_uint32', index=28, + number=33, type=13, cpp_type=3, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_uint64', full_name='protobuf_unittest.TestAllTypes.repeated_uint64', index=29, + number=34, type=4, cpp_type=4, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_sint32', full_name='protobuf_unittest.TestAllTypes.repeated_sint32', index=30, + number=35, type=17, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_sint64', full_name='protobuf_unittest.TestAllTypes.repeated_sint64', index=31, + number=36, type=18, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_fixed32', full_name='protobuf_unittest.TestAllTypes.repeated_fixed32', index=32, + number=37, type=7, cpp_type=3, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_fixed64', full_name='protobuf_unittest.TestAllTypes.repeated_fixed64', index=33, + number=38, type=6, cpp_type=4, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_sfixed32', full_name='protobuf_unittest.TestAllTypes.repeated_sfixed32', index=34, + number=39, type=15, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_sfixed64', full_name='protobuf_unittest.TestAllTypes.repeated_sfixed64', index=35, + number=40, type=16, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_float', full_name='protobuf_unittest.TestAllTypes.repeated_float', index=36, + number=41, type=2, cpp_type=6, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_double', full_name='protobuf_unittest.TestAllTypes.repeated_double', index=37, + number=42, type=1, cpp_type=5, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_bool', full_name='protobuf_unittest.TestAllTypes.repeated_bool', index=38, + number=43, type=8, cpp_type=7, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_string', full_name='protobuf_unittest.TestAllTypes.repeated_string', index=39, + number=44, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_bytes', full_name='protobuf_unittest.TestAllTypes.repeated_bytes', index=40, + number=45, type=12, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeatedgroup', full_name='protobuf_unittest.TestAllTypes.repeatedgroup', index=41, + number=46, type=10, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_nested_message', full_name='protobuf_unittest.TestAllTypes.repeated_nested_message', index=42, + number=48, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_foreign_message', full_name='protobuf_unittest.TestAllTypes.repeated_foreign_message', index=43, + number=49, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_import_message', full_name='protobuf_unittest.TestAllTypes.repeated_import_message', index=44, + number=50, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_nested_enum', full_name='protobuf_unittest.TestAllTypes.repeated_nested_enum', index=45, + number=51, type=14, cpp_type=8, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_foreign_enum', full_name='protobuf_unittest.TestAllTypes.repeated_foreign_enum', index=46, + number=52, type=14, cpp_type=8, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_import_enum', full_name='protobuf_unittest.TestAllTypes.repeated_import_enum', index=47, + number=53, type=14, cpp_type=8, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_string_piece', full_name='protobuf_unittest.TestAllTypes.repeated_string_piece', index=48, + number=54, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002')), + _descriptor.FieldDescriptor( + name='repeated_cord', full_name='protobuf_unittest.TestAllTypes.repeated_cord', index=49, + number=55, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001')), + _descriptor.FieldDescriptor( + name='repeated_lazy_message', full_name='protobuf_unittest.TestAllTypes.repeated_lazy_message', index=50, + number=57, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '(\001')), + _descriptor.FieldDescriptor( + name='default_int32', full_name='protobuf_unittest.TestAllTypes.default_int32', index=51, + number=61, type=5, cpp_type=1, label=1, + has_default_value=True, default_value=41, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_int64', full_name='protobuf_unittest.TestAllTypes.default_int64', index=52, + number=62, type=3, cpp_type=2, label=1, + has_default_value=True, default_value=42, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_uint32', full_name='protobuf_unittest.TestAllTypes.default_uint32', index=53, + number=63, type=13, cpp_type=3, label=1, + has_default_value=True, default_value=43, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_uint64', full_name='protobuf_unittest.TestAllTypes.default_uint64', index=54, + number=64, type=4, cpp_type=4, label=1, + has_default_value=True, default_value=44, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_sint32', full_name='protobuf_unittest.TestAllTypes.default_sint32', index=55, + number=65, type=17, cpp_type=1, label=1, + has_default_value=True, default_value=-45, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_sint64', full_name='protobuf_unittest.TestAllTypes.default_sint64', index=56, + number=66, type=18, cpp_type=2, label=1, + has_default_value=True, default_value=46, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_fixed32', full_name='protobuf_unittest.TestAllTypes.default_fixed32', index=57, + number=67, type=7, cpp_type=3, label=1, + has_default_value=True, default_value=47, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_fixed64', full_name='protobuf_unittest.TestAllTypes.default_fixed64', index=58, + number=68, type=6, cpp_type=4, label=1, + has_default_value=True, default_value=48, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_sfixed32', full_name='protobuf_unittest.TestAllTypes.default_sfixed32', index=59, + number=69, type=15, cpp_type=1, label=1, + has_default_value=True, default_value=49, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_sfixed64', full_name='protobuf_unittest.TestAllTypes.default_sfixed64', index=60, + number=70, type=16, cpp_type=2, label=1, + has_default_value=True, default_value=-50, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_float', full_name='protobuf_unittest.TestAllTypes.default_float', index=61, + number=71, type=2, cpp_type=6, label=1, + has_default_value=True, default_value=51.5, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_double', full_name='protobuf_unittest.TestAllTypes.default_double', index=62, + number=72, type=1, cpp_type=5, label=1, + has_default_value=True, default_value=52000, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_bool', full_name='protobuf_unittest.TestAllTypes.default_bool', index=63, + number=73, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=True, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_string', full_name='protobuf_unittest.TestAllTypes.default_string', index=64, + number=74, type=9, cpp_type=9, label=1, + has_default_value=True, default_value=unicode("hello", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_bytes', full_name='protobuf_unittest.TestAllTypes.default_bytes', index=65, + number=75, type=12, cpp_type=9, label=1, + has_default_value=True, default_value="world", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_nested_enum', full_name='protobuf_unittest.TestAllTypes.default_nested_enum', index=66, + number=81, type=14, cpp_type=8, label=1, + has_default_value=True, default_value=2, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_foreign_enum', full_name='protobuf_unittest.TestAllTypes.default_foreign_enum', index=67, + number=82, type=14, cpp_type=8, label=1, + has_default_value=True, default_value=5, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_import_enum', full_name='protobuf_unittest.TestAllTypes.default_import_enum', index=68, + number=83, type=14, cpp_type=8, label=1, + has_default_value=True, default_value=8, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='default_string_piece', full_name='protobuf_unittest.TestAllTypes.default_string_piece', index=69, + number=84, type=9, cpp_type=9, label=1, + has_default_value=True, default_value=unicode("abc", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002')), + _descriptor.FieldDescriptor( + name='default_cord', full_name='protobuf_unittest.TestAllTypes.default_cord', index=70, + number=85, type=9, cpp_type=9, label=1, + has_default_value=True, default_value=unicode("123", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001')), + ], + extensions=[ + ], + nested_types=[_TESTALLTYPES_NESTEDMESSAGE, _TESTALLTYPES_OPTIONALGROUP, _TESTALLTYPES_REPEATEDGROUP, ], + enum_types=[ + _TESTALLTYPES_NESTEDENUM, + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=93, + serialized_end=3091, +) + + +_TESTDEPRECATEDFIELDS = _descriptor.Descriptor( + name='TestDeprecatedFields', + full_name='protobuf_unittest.TestDeprecatedFields', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='deprecated_int32', full_name='protobuf_unittest.TestDeprecatedFields.deprecated_int32', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\030\001')), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=3093, + serialized_end=3145, +) + + +_FOREIGNMESSAGE = _descriptor.Descriptor( + name='ForeignMessage', + full_name='protobuf_unittest.ForeignMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='c', full_name='protobuf_unittest.ForeignMessage.c', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=3147, + serialized_end=3174, +) + + +_TESTALLEXTENSIONS = _descriptor.Descriptor( + name='TestAllExtensions', + full_name='protobuf_unittest.TestAllExtensions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(1, 536870912), ], + serialized_start=3176, + serialized_end=3205, +) + + +_OPTIONALGROUP_EXTENSION = _descriptor.Descriptor( + name='OptionalGroup_extension', + full_name='protobuf_unittest.OptionalGroup_extension', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='a', full_name='protobuf_unittest.OptionalGroup_extension.a', index=0, + number=17, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=3207, + serialized_end=3243, +) + + +_REPEATEDGROUP_EXTENSION = _descriptor.Descriptor( + name='RepeatedGroup_extension', + full_name='protobuf_unittest.RepeatedGroup_extension', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='a', full_name='protobuf_unittest.RepeatedGroup_extension.a', index=0, + number=47, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=3245, + serialized_end=3281, +) + + +_TESTNESTEDEXTENSION = _descriptor.Descriptor( + name='TestNestedExtension', + full_name='protobuf_unittest.TestNestedExtension', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + _descriptor.FieldDescriptor( + name='test', full_name='protobuf_unittest.TestNestedExtension.test', index=0, + number=1002, type=9, cpp_type=9, label=1, + has_default_value=True, default_value=unicode("test", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None), + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=3283, + serialized_end=3363, +) + + +_TESTREQUIRED = _descriptor.Descriptor( + name='TestRequired', + full_name='protobuf_unittest.TestRequired', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='a', full_name='protobuf_unittest.TestRequired.a', index=0, + number=1, type=5, cpp_type=1, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy2', full_name='protobuf_unittest.TestRequired.dummy2', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='b', full_name='protobuf_unittest.TestRequired.b', index=2, + number=3, type=5, cpp_type=1, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy4', full_name='protobuf_unittest.TestRequired.dummy4', index=3, + number=4, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy5', full_name='protobuf_unittest.TestRequired.dummy5', index=4, + number=5, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy6', full_name='protobuf_unittest.TestRequired.dummy6', index=5, + number=6, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy7', full_name='protobuf_unittest.TestRequired.dummy7', index=6, + number=7, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy8', full_name='protobuf_unittest.TestRequired.dummy8', index=7, + number=8, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy9', full_name='protobuf_unittest.TestRequired.dummy9', index=8, + number=9, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy10', full_name='protobuf_unittest.TestRequired.dummy10', index=9, + number=10, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy11', full_name='protobuf_unittest.TestRequired.dummy11', index=10, + number=11, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy12', full_name='protobuf_unittest.TestRequired.dummy12', index=11, + number=12, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy13', full_name='protobuf_unittest.TestRequired.dummy13', index=12, + number=13, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy14', full_name='protobuf_unittest.TestRequired.dummy14', index=13, + number=14, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy15', full_name='protobuf_unittest.TestRequired.dummy15', index=14, + number=15, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy16', full_name='protobuf_unittest.TestRequired.dummy16', index=15, + number=16, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy17', full_name='protobuf_unittest.TestRequired.dummy17', index=16, + number=17, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy18', full_name='protobuf_unittest.TestRequired.dummy18', index=17, + number=18, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy19', full_name='protobuf_unittest.TestRequired.dummy19', index=18, + number=19, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy20', full_name='protobuf_unittest.TestRequired.dummy20', index=19, + number=20, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy21', full_name='protobuf_unittest.TestRequired.dummy21', index=20, + number=21, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy22', full_name='protobuf_unittest.TestRequired.dummy22', index=21, + number=22, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy23', full_name='protobuf_unittest.TestRequired.dummy23', index=22, + number=23, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy24', full_name='protobuf_unittest.TestRequired.dummy24', index=23, + number=24, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy25', full_name='protobuf_unittest.TestRequired.dummy25', index=24, + number=25, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy26', full_name='protobuf_unittest.TestRequired.dummy26', index=25, + number=26, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy27', full_name='protobuf_unittest.TestRequired.dummy27', index=26, + number=27, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy28', full_name='protobuf_unittest.TestRequired.dummy28', index=27, + number=28, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy29', full_name='protobuf_unittest.TestRequired.dummy29', index=28, + number=29, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy30', full_name='protobuf_unittest.TestRequired.dummy30', index=29, + number=30, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy31', full_name='protobuf_unittest.TestRequired.dummy31', index=30, + number=31, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy32', full_name='protobuf_unittest.TestRequired.dummy32', index=31, + number=32, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='c', full_name='protobuf_unittest.TestRequired.c', index=32, + number=33, type=5, cpp_type=1, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + _descriptor.FieldDescriptor( + name='single', full_name='protobuf_unittest.TestRequired.single', index=0, + number=1000, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='multi', full_name='protobuf_unittest.TestRequired.multi', index=1, + number=1001, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None), + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=3366, + serialized_end=4091, +) + + +_TESTREQUIREDFOREIGN = _descriptor.Descriptor( + name='TestRequiredForeign', + full_name='protobuf_unittest.TestRequiredForeign', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='optional_message', full_name='protobuf_unittest.TestRequiredForeign.optional_message', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_message', full_name='protobuf_unittest.TestRequiredForeign.repeated_message', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dummy', full_name='protobuf_unittest.TestRequiredForeign.dummy', index=2, + number=3, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=4094, + serialized_end=4248, +) + + +_TESTFOREIGNNESTED = _descriptor.Descriptor( + name='TestForeignNested', + full_name='protobuf_unittest.TestForeignNested', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='foreign_nested', full_name='protobuf_unittest.TestForeignNested.foreign_nested', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=4250, + serialized_end=4340, +) + + +_TESTEMPTYMESSAGE = _descriptor.Descriptor( + name='TestEmptyMessage', + full_name='protobuf_unittest.TestEmptyMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=4342, + serialized_end=4360, +) + + +_TESTEMPTYMESSAGEWITHEXTENSIONS = _descriptor.Descriptor( + name='TestEmptyMessageWithExtensions', + full_name='protobuf_unittest.TestEmptyMessageWithExtensions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(1, 536870912), ], + serialized_start=4362, + serialized_end=4404, +) + + +_TESTMULTIPLEEXTENSIONRANGES = _descriptor.Descriptor( + name='TestMultipleExtensionRanges', + full_name='protobuf_unittest.TestMultipleExtensionRanges', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(42, 43), (4143, 4244), (65536, 536870912), ], + serialized_start=4406, + serialized_end=4461, +) + + +_TESTREALLYLARGETAGNUMBER = _descriptor.Descriptor( + name='TestReallyLargeTagNumber', + full_name='protobuf_unittest.TestReallyLargeTagNumber', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='a', full_name='protobuf_unittest.TestReallyLargeTagNumber.a', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='bb', full_name='protobuf_unittest.TestReallyLargeTagNumber.bb', index=1, + number=268435455, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=4463, + serialized_end=4515, +) + + +_TESTRECURSIVEMESSAGE = _descriptor.Descriptor( + name='TestRecursiveMessage', + full_name='protobuf_unittest.TestRecursiveMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='a', full_name='protobuf_unittest.TestRecursiveMessage.a', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='i', full_name='protobuf_unittest.TestRecursiveMessage.i', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=4517, + serialized_end=4602, +) + + +_TESTMUTUALRECURSIONA = _descriptor.Descriptor( + name='TestMutualRecursionA', + full_name='protobuf_unittest.TestMutualRecursionA', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='bb', full_name='protobuf_unittest.TestMutualRecursionA.bb', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=4604, + serialized_end=4679, +) + + +_TESTMUTUALRECURSIONB = _descriptor.Descriptor( + name='TestMutualRecursionB', + full_name='protobuf_unittest.TestMutualRecursionB', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='a', full_name='protobuf_unittest.TestMutualRecursionB.a', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_int32', full_name='protobuf_unittest.TestMutualRecursionB.optional_int32', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=4681, + serialized_end=4779, +) + + +_TESTDUPFIELDNUMBER_FOO = _descriptor.Descriptor( + name='Foo', + full_name='protobuf_unittest.TestDupFieldNumber.Foo', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='a', full_name='protobuf_unittest.TestDupFieldNumber.Foo.a', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=4927, + serialized_end=4943, +) + +_TESTDUPFIELDNUMBER_BAR = _descriptor.Descriptor( + name='Bar', + full_name='protobuf_unittest.TestDupFieldNumber.Bar', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='a', full_name='protobuf_unittest.TestDupFieldNumber.Bar.a', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=4945, + serialized_end=4961, +) + +_TESTDUPFIELDNUMBER = _descriptor.Descriptor( + name='TestDupFieldNumber', + full_name='protobuf_unittest.TestDupFieldNumber', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='a', full_name='protobuf_unittest.TestDupFieldNumber.a', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='foo', full_name='protobuf_unittest.TestDupFieldNumber.foo', index=1, + number=2, type=10, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='bar', full_name='protobuf_unittest.TestDupFieldNumber.bar', index=2, + number=3, type=10, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_TESTDUPFIELDNUMBER_FOO, _TESTDUPFIELDNUMBER_BAR, ], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=4782, + serialized_end=4961, +) + + +_TESTEAGERMESSAGE = _descriptor.Descriptor( + name='TestEagerMessage', + full_name='protobuf_unittest.TestEagerMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='sub_message', full_name='protobuf_unittest.TestEagerMessage.sub_message', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '(\000')), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=4963, + serialized_end=5039, +) + + +_TESTLAZYMESSAGE = _descriptor.Descriptor( + name='TestLazyMessage', + full_name='protobuf_unittest.TestLazyMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='sub_message', full_name='protobuf_unittest.TestLazyMessage.sub_message', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '(\001')), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=5041, + serialized_end=5116, +) + + +_TESTNESTEDMESSAGEHASBITS_NESTEDMESSAGE = _descriptor.Descriptor( + name='NestedMessage', + full_name='protobuf_unittest.TestNestedMessageHasBits.NestedMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='nestedmessage_repeated_int32', full_name='protobuf_unittest.TestNestedMessageHasBits.NestedMessage.nestedmessage_repeated_int32', index=0, + number=1, type=5, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='nestedmessage_repeated_foreignmessage', full_name='protobuf_unittest.TestNestedMessageHasBits.NestedMessage.nestedmessage_repeated_foreignmessage', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=5240, + serialized_end=5375, +) + +_TESTNESTEDMESSAGEHASBITS = _descriptor.Descriptor( + name='TestNestedMessageHasBits', + full_name='protobuf_unittest.TestNestedMessageHasBits', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='optional_nested_message', full_name='protobuf_unittest.TestNestedMessageHasBits.optional_nested_message', index=0, + number=1, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_TESTNESTEDMESSAGEHASBITS_NESTEDMESSAGE, ], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=5119, + serialized_end=5375, +) + + +_TESTCAMELCASEFIELDNAMES = _descriptor.Descriptor( + name='TestCamelCaseFieldNames', + full_name='protobuf_unittest.TestCamelCaseFieldNames', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='PrimitiveField', full_name='protobuf_unittest.TestCamelCaseFieldNames.PrimitiveField', index=0, + number=1, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='StringField', full_name='protobuf_unittest.TestCamelCaseFieldNames.StringField', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='EnumField', full_name='protobuf_unittest.TestCamelCaseFieldNames.EnumField', index=2, + number=3, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=4, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='MessageField', full_name='protobuf_unittest.TestCamelCaseFieldNames.MessageField', index=3, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='StringPieceField', full_name='protobuf_unittest.TestCamelCaseFieldNames.StringPieceField', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002')), + _descriptor.FieldDescriptor( + name='CordField', full_name='protobuf_unittest.TestCamelCaseFieldNames.CordField', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001')), + _descriptor.FieldDescriptor( + name='RepeatedPrimitiveField', full_name='protobuf_unittest.TestCamelCaseFieldNames.RepeatedPrimitiveField', index=6, + number=7, type=5, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RepeatedStringField', full_name='protobuf_unittest.TestCamelCaseFieldNames.RepeatedStringField', index=7, + number=8, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RepeatedEnumField', full_name='protobuf_unittest.TestCamelCaseFieldNames.RepeatedEnumField', index=8, + number=9, type=14, cpp_type=8, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RepeatedMessageField', full_name='protobuf_unittest.TestCamelCaseFieldNames.RepeatedMessageField', index=9, + number=10, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='RepeatedStringPieceField', full_name='protobuf_unittest.TestCamelCaseFieldNames.RepeatedStringPieceField', index=10, + number=11, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002')), + _descriptor.FieldDescriptor( + name='RepeatedCordField', full_name='protobuf_unittest.TestCamelCaseFieldNames.RepeatedCordField', index=11, + number=12, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001')), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=5378, + serialized_end=5863, +) + + +_TESTFIELDORDERINGS = _descriptor.Descriptor( + name='TestFieldOrderings', + full_name='protobuf_unittest.TestFieldOrderings', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='my_string', full_name='protobuf_unittest.TestFieldOrderings.my_string', index=0, + number=11, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='my_int', full_name='protobuf_unittest.TestFieldOrderings.my_int', index=1, + number=1, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='my_float', full_name='protobuf_unittest.TestFieldOrderings.my_float', index=2, + number=101, type=2, cpp_type=6, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(2, 11), (12, 101), ], + serialized_start=5865, + serialized_end=5950, +) + + +_TESTEXTREMEDEFAULTVALUES = _descriptor.Descriptor( + name='TestExtremeDefaultValues', + full_name='protobuf_unittest.TestExtremeDefaultValues', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='escaped_bytes', full_name='protobuf_unittest.TestExtremeDefaultValues.escaped_bytes', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=True, default_value="\000\001\007\010\014\n\r\t\013\\\'\"\376", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='large_uint32', full_name='protobuf_unittest.TestExtremeDefaultValues.large_uint32', index=1, + number=2, type=13, cpp_type=3, label=1, + has_default_value=True, default_value=4294967295, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='large_uint64', full_name='protobuf_unittest.TestExtremeDefaultValues.large_uint64', index=2, + number=3, type=4, cpp_type=4, label=1, + has_default_value=True, default_value=18446744073709551615, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='small_int32', full_name='protobuf_unittest.TestExtremeDefaultValues.small_int32', index=3, + number=4, type=5, cpp_type=1, label=1, + has_default_value=True, default_value=-2147483647, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='small_int64', full_name='protobuf_unittest.TestExtremeDefaultValues.small_int64', index=4, + number=5, type=3, cpp_type=2, label=1, + has_default_value=True, default_value=-9223372036854775807, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='really_small_int32', full_name='protobuf_unittest.TestExtremeDefaultValues.really_small_int32', index=5, + number=21, type=5, cpp_type=1, label=1, + has_default_value=True, default_value=-2147483648, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='really_small_int64', full_name='protobuf_unittest.TestExtremeDefaultValues.really_small_int64', index=6, + number=22, type=3, cpp_type=2, label=1, + has_default_value=True, default_value=-9223372036854775808, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='utf8_string', full_name='protobuf_unittest.TestExtremeDefaultValues.utf8_string', index=7, + number=6, type=9, cpp_type=9, label=1, + has_default_value=True, default_value=unicode("\341\210\264", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='zero_float', full_name='protobuf_unittest.TestExtremeDefaultValues.zero_float', index=8, + number=7, type=2, cpp_type=6, label=1, + has_default_value=True, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='one_float', full_name='protobuf_unittest.TestExtremeDefaultValues.one_float', index=9, + number=8, type=2, cpp_type=6, label=1, + has_default_value=True, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='small_float', full_name='protobuf_unittest.TestExtremeDefaultValues.small_float', index=10, + number=9, type=2, cpp_type=6, label=1, + has_default_value=True, default_value=1.5, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='negative_one_float', full_name='protobuf_unittest.TestExtremeDefaultValues.negative_one_float', index=11, + number=10, type=2, cpp_type=6, label=1, + has_default_value=True, default_value=-1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='negative_float', full_name='protobuf_unittest.TestExtremeDefaultValues.negative_float', index=12, + number=11, type=2, cpp_type=6, label=1, + has_default_value=True, default_value=-1.5, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='large_float', full_name='protobuf_unittest.TestExtremeDefaultValues.large_float', index=13, + number=12, type=2, cpp_type=6, label=1, + has_default_value=True, default_value=2e+08, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='small_negative_float', full_name='protobuf_unittest.TestExtremeDefaultValues.small_negative_float', index=14, + number=13, type=2, cpp_type=6, label=1, + has_default_value=True, default_value=-8e-28, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='inf_double', full_name='protobuf_unittest.TestExtremeDefaultValues.inf_double', index=15, + number=14, type=1, cpp_type=5, label=1, + has_default_value=True, default_value=1e10000, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='neg_inf_double', full_name='protobuf_unittest.TestExtremeDefaultValues.neg_inf_double', index=16, + number=15, type=1, cpp_type=5, label=1, + has_default_value=True, default_value=-1e10000, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='nan_double', full_name='protobuf_unittest.TestExtremeDefaultValues.nan_double', index=17, + number=16, type=1, cpp_type=5, label=1, + has_default_value=True, default_value=(1e10000 * 0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='inf_float', full_name='protobuf_unittest.TestExtremeDefaultValues.inf_float', index=18, + number=17, type=2, cpp_type=6, label=1, + has_default_value=True, default_value=1e10000, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='neg_inf_float', full_name='protobuf_unittest.TestExtremeDefaultValues.neg_inf_float', index=19, + number=18, type=2, cpp_type=6, label=1, + has_default_value=True, default_value=-1e10000, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='nan_float', full_name='protobuf_unittest.TestExtremeDefaultValues.nan_float', index=20, + number=19, type=2, cpp_type=6, label=1, + has_default_value=True, default_value=(1e10000 * 0), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='cpp_trigraph', full_name='protobuf_unittest.TestExtremeDefaultValues.cpp_trigraph', index=21, + number=20, type=9, cpp_type=9, label=1, + has_default_value=True, default_value=unicode("? ? ?? ?? ??? ??/ ??-", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='string_with_zero', full_name='protobuf_unittest.TestExtremeDefaultValues.string_with_zero', index=22, + number=23, type=9, cpp_type=9, label=1, + has_default_value=True, default_value=unicode("hel\000lo", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='bytes_with_zero', full_name='protobuf_unittest.TestExtremeDefaultValues.bytes_with_zero', index=23, + number=24, type=12, cpp_type=9, label=1, + has_default_value=True, default_value="wor\000ld", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='string_piece_with_zero', full_name='protobuf_unittest.TestExtremeDefaultValues.string_piece_with_zero', index=24, + number=25, type=9, cpp_type=9, label=1, + has_default_value=True, default_value=unicode("ab\000c", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002')), + _descriptor.FieldDescriptor( + name='cord_with_zero', full_name='protobuf_unittest.TestExtremeDefaultValues.cord_with_zero', index=25, + number=26, type=9, cpp_type=9, label=1, + has_default_value=True, default_value=unicode("12\0003", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001')), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=5953, + serialized_end=6863, +) + + +_SPARSEENUMMESSAGE = _descriptor.Descriptor( + name='SparseEnumMessage', + full_name='protobuf_unittest.SparseEnumMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='sparse_enum', full_name='protobuf_unittest.SparseEnumMessage.sparse_enum', index=0, + number=1, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=123, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=6865, + serialized_end=6940, +) + + +_ONESTRING = _descriptor.Descriptor( + name='OneString', + full_name='protobuf_unittest.OneString', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='data', full_name='protobuf_unittest.OneString.data', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=6942, + serialized_end=6967, +) + + +_MORESTRING = _descriptor.Descriptor( + name='MoreString', + full_name='protobuf_unittest.MoreString', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='data', full_name='protobuf_unittest.MoreString.data', index=0, + number=1, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=6969, + serialized_end=6995, +) + + +_ONEBYTES = _descriptor.Descriptor( + name='OneBytes', + full_name='protobuf_unittest.OneBytes', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='data', full_name='protobuf_unittest.OneBytes.data', index=0, + number=1, type=12, cpp_type=9, label=1, + has_default_value=False, default_value="", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=6997, + serialized_end=7021, +) + + +_MOREBYTES = _descriptor.Descriptor( + name='MoreBytes', + full_name='protobuf_unittest.MoreBytes', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='data', full_name='protobuf_unittest.MoreBytes.data', index=0, + number=1, type=12, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=7023, + serialized_end=7048, +) + + +_TESTPACKEDTYPES = _descriptor.Descriptor( + name='TestPackedTypes', + full_name='protobuf_unittest.TestPackedTypes', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='packed_int32', full_name='protobuf_unittest.TestPackedTypes.packed_int32', index=0, + number=90, type=5, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + _descriptor.FieldDescriptor( + name='packed_int64', full_name='protobuf_unittest.TestPackedTypes.packed_int64', index=1, + number=91, type=3, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + _descriptor.FieldDescriptor( + name='packed_uint32', full_name='protobuf_unittest.TestPackedTypes.packed_uint32', index=2, + number=92, type=13, cpp_type=3, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + _descriptor.FieldDescriptor( + name='packed_uint64', full_name='protobuf_unittest.TestPackedTypes.packed_uint64', index=3, + number=93, type=4, cpp_type=4, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + _descriptor.FieldDescriptor( + name='packed_sint32', full_name='protobuf_unittest.TestPackedTypes.packed_sint32', index=4, + number=94, type=17, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + _descriptor.FieldDescriptor( + name='packed_sint64', full_name='protobuf_unittest.TestPackedTypes.packed_sint64', index=5, + number=95, type=18, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + _descriptor.FieldDescriptor( + name='packed_fixed32', full_name='protobuf_unittest.TestPackedTypes.packed_fixed32', index=6, + number=96, type=7, cpp_type=3, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + _descriptor.FieldDescriptor( + name='packed_fixed64', full_name='protobuf_unittest.TestPackedTypes.packed_fixed64', index=7, + number=97, type=6, cpp_type=4, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + _descriptor.FieldDescriptor( + name='packed_sfixed32', full_name='protobuf_unittest.TestPackedTypes.packed_sfixed32', index=8, + number=98, type=15, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + _descriptor.FieldDescriptor( + name='packed_sfixed64', full_name='protobuf_unittest.TestPackedTypes.packed_sfixed64', index=9, + number=99, type=16, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + _descriptor.FieldDescriptor( + name='packed_float', full_name='protobuf_unittest.TestPackedTypes.packed_float', index=10, + number=100, type=2, cpp_type=6, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + _descriptor.FieldDescriptor( + name='packed_double', full_name='protobuf_unittest.TestPackedTypes.packed_double', index=11, + number=101, type=1, cpp_type=5, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + _descriptor.FieldDescriptor( + name='packed_bool', full_name='protobuf_unittest.TestPackedTypes.packed_bool', index=12, + number=102, type=8, cpp_type=7, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + _descriptor.FieldDescriptor( + name='packed_enum', full_name='protobuf_unittest.TestPackedTypes.packed_enum', index=13, + number=103, type=14, cpp_type=8, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=7051, + serialized_end=7477, +) + + +_TESTUNPACKEDTYPES = _descriptor.Descriptor( + name='TestUnpackedTypes', + full_name='protobuf_unittest.TestUnpackedTypes', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='unpacked_int32', full_name='protobuf_unittest.TestUnpackedTypes.unpacked_int32', index=0, + number=90, type=5, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000')), + _descriptor.FieldDescriptor( + name='unpacked_int64', full_name='protobuf_unittest.TestUnpackedTypes.unpacked_int64', index=1, + number=91, type=3, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000')), + _descriptor.FieldDescriptor( + name='unpacked_uint32', full_name='protobuf_unittest.TestUnpackedTypes.unpacked_uint32', index=2, + number=92, type=13, cpp_type=3, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000')), + _descriptor.FieldDescriptor( + name='unpacked_uint64', full_name='protobuf_unittest.TestUnpackedTypes.unpacked_uint64', index=3, + number=93, type=4, cpp_type=4, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000')), + _descriptor.FieldDescriptor( + name='unpacked_sint32', full_name='protobuf_unittest.TestUnpackedTypes.unpacked_sint32', index=4, + number=94, type=17, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000')), + _descriptor.FieldDescriptor( + name='unpacked_sint64', full_name='protobuf_unittest.TestUnpackedTypes.unpacked_sint64', index=5, + number=95, type=18, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000')), + _descriptor.FieldDescriptor( + name='unpacked_fixed32', full_name='protobuf_unittest.TestUnpackedTypes.unpacked_fixed32', index=6, + number=96, type=7, cpp_type=3, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000')), + _descriptor.FieldDescriptor( + name='unpacked_fixed64', full_name='protobuf_unittest.TestUnpackedTypes.unpacked_fixed64', index=7, + number=97, type=6, cpp_type=4, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000')), + _descriptor.FieldDescriptor( + name='unpacked_sfixed32', full_name='protobuf_unittest.TestUnpackedTypes.unpacked_sfixed32', index=8, + number=98, type=15, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000')), + _descriptor.FieldDescriptor( + name='unpacked_sfixed64', full_name='protobuf_unittest.TestUnpackedTypes.unpacked_sfixed64', index=9, + number=99, type=16, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000')), + _descriptor.FieldDescriptor( + name='unpacked_float', full_name='protobuf_unittest.TestUnpackedTypes.unpacked_float', index=10, + number=100, type=2, cpp_type=6, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000')), + _descriptor.FieldDescriptor( + name='unpacked_double', full_name='protobuf_unittest.TestUnpackedTypes.unpacked_double', index=11, + number=101, type=1, cpp_type=5, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000')), + _descriptor.FieldDescriptor( + name='unpacked_bool', full_name='protobuf_unittest.TestUnpackedTypes.unpacked_bool', index=12, + number=102, type=8, cpp_type=7, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000')), + _descriptor.FieldDescriptor( + name='unpacked_enum', full_name='protobuf_unittest.TestUnpackedTypes.unpacked_enum', index=13, + number=103, type=14, cpp_type=8, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000')), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=7480, + serialized_end=7936, +) + + +_TESTPACKEDEXTENSIONS = _descriptor.Descriptor( + name='TestPackedExtensions', + full_name='protobuf_unittest.TestPackedExtensions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(1, 536870912), ], + serialized_start=7938, + serialized_end=7970, +) + + +_TESTDYNAMICEXTENSIONS_DYNAMICMESSAGETYPE = _descriptor.Descriptor( + name='DynamicMessageType', + full_name='protobuf_unittest.TestDynamicExtensions.DynamicMessageType', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='dynamic_field', full_name='protobuf_unittest.TestDynamicExtensions.DynamicMessageType.dynamic_field', index=0, + number=2100, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=8393, + serialized_end=8437, +) + +_TESTDYNAMICEXTENSIONS = _descriptor.Descriptor( + name='TestDynamicExtensions', + full_name='protobuf_unittest.TestDynamicExtensions', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='scalar_extension', full_name='protobuf_unittest.TestDynamicExtensions.scalar_extension', index=0, + number=2000, type=7, cpp_type=3, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='enum_extension', full_name='protobuf_unittest.TestDynamicExtensions.enum_extension', index=1, + number=2001, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=4, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dynamic_enum_extension', full_name='protobuf_unittest.TestDynamicExtensions.dynamic_enum_extension', index=2, + number=2002, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=2200, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='message_extension', full_name='protobuf_unittest.TestDynamicExtensions.message_extension', index=3, + number=2003, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='dynamic_message_extension', full_name='protobuf_unittest.TestDynamicExtensions.dynamic_message_extension', index=4, + number=2004, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_extension', full_name='protobuf_unittest.TestDynamicExtensions.repeated_extension', index=5, + number=2005, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='packed_extension', full_name='protobuf_unittest.TestDynamicExtensions.packed_extension', index=6, + number=2006, type=17, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001')), + ], + extensions=[ + ], + nested_types=[_TESTDYNAMICEXTENSIONS_DYNAMICMESSAGETYPE, ], + enum_types=[ + _TESTDYNAMICEXTENSIONS_DYNAMICENUMTYPE, + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=7973, + serialized_end=8510, +) + + +_TESTREPEATEDSCALARDIFFERENTTAGSIZES = _descriptor.Descriptor( + name='TestRepeatedScalarDifferentTagSizes', + full_name='protobuf_unittest.TestRepeatedScalarDifferentTagSizes', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='repeated_fixed32', full_name='protobuf_unittest.TestRepeatedScalarDifferentTagSizes.repeated_fixed32', index=0, + number=12, type=7, cpp_type=3, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_int32', full_name='protobuf_unittest.TestRepeatedScalarDifferentTagSizes.repeated_int32', index=1, + number=13, type=5, cpp_type=1, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_fixed64', full_name='protobuf_unittest.TestRepeatedScalarDifferentTagSizes.repeated_fixed64', index=2, + number=2046, type=6, cpp_type=4, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_int64', full_name='protobuf_unittest.TestRepeatedScalarDifferentTagSizes.repeated_int64', index=3, + number=2047, type=3, cpp_type=2, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_float', full_name='protobuf_unittest.TestRepeatedScalarDifferentTagSizes.repeated_float', index=4, + number=262142, type=2, cpp_type=6, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_uint64', full_name='protobuf_unittest.TestRepeatedScalarDifferentTagSizes.repeated_uint64', index=5, + number=262143, type=4, cpp_type=4, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=8513, + serialized_end=8705, +) + + +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR_GROUP1 = _descriptor.Descriptor( + name='Group1', + full_name='protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.Group1', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='field1', full_name='protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.Group1.field1', index=0, + number=11, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=9498, + serialized_end=9555, +) + +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR_GROUP2 = _descriptor.Descriptor( + name='Group2', + full_name='protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.Group2', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='field1', full_name='protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.Group2.field1', index=0, + number=21, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=9557, + serialized_end=9614, +) + +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR = _descriptor.Descriptor( + name='RepeatedFieldsGenerator', + full_name='protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='field1', full_name='protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.field1', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='field2', full_name='protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.field2', index=1, + number=2, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='field3', full_name='protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.field3', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='group1', full_name='protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.group1', index=3, + number=10, type=10, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='group2', full_name='protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.group2', index=4, + number=20, type=10, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='ext1', full_name='protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.ext1', index=5, + number=1000, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='ext2', full_name='protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.ext2', index=6, + number=1001, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR_GROUP1, _TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR_GROUP2, ], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=9060, + serialized_end=9614, +) + +_TESTPARSINGMERGE_OPTIONALGROUP = _descriptor.Descriptor( + name='OptionalGroup', + full_name='protobuf_unittest.TestParsingMerge.OptionalGroup', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='optional_group_all_types', full_name='protobuf_unittest.TestParsingMerge.OptionalGroup.optional_group_all_types', index=0, + number=11, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=9616, + serialized_end=9698, +) + +_TESTPARSINGMERGE_REPEATEDGROUP = _descriptor.Descriptor( + name='RepeatedGroup', + full_name='protobuf_unittest.TestParsingMerge.RepeatedGroup', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='repeated_group_all_types', full_name='protobuf_unittest.TestParsingMerge.RepeatedGroup.repeated_group_all_types', index=0, + number=21, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=9700, + serialized_end=9782, +) + +_TESTPARSINGMERGE = _descriptor.Descriptor( + name='TestParsingMerge', + full_name='protobuf_unittest.TestParsingMerge', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='required_all_types', full_name='protobuf_unittest.TestParsingMerge.required_all_types', index=0, + number=1, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optional_all_types', full_name='protobuf_unittest.TestParsingMerge.optional_all_types', index=1, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_all_types', full_name='protobuf_unittest.TestParsingMerge.repeated_all_types', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='optionalgroup', full_name='protobuf_unittest.TestParsingMerge.optionalgroup', index=3, + number=10, type=10, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeatedgroup', full_name='protobuf_unittest.TestParsingMerge.repeatedgroup', index=4, + number=20, type=10, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + _descriptor.FieldDescriptor( + name='optional_ext', full_name='protobuf_unittest.TestParsingMerge.optional_ext', index=0, + number=1000, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None), + _descriptor.FieldDescriptor( + name='repeated_ext', full_name='protobuf_unittest.TestParsingMerge.repeated_ext', index=1, + number=1001, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=True, extension_scope=None, + options=None), + ], + nested_types=[_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR, _TESTPARSINGMERGE_OPTIONALGROUP, _TESTPARSINGMERGE_REPEATEDGROUP, ], + enum_types=[ + ], + options=None, + is_extendable=True, + extension_ranges=[(1000, 536870912), ], + serialized_start=8708, + serialized_end=9979, +) + + +_TESTCOMMENTINJECTIONMESSAGE = _descriptor.Descriptor( + name='TestCommentInjectionMessage', + full_name='protobuf_unittest.TestCommentInjectionMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + _descriptor.FieldDescriptor( + name='a', full_name='protobuf_unittest.TestCommentInjectionMessage.a', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=True, default_value=unicode("*/ <- Neither should this.", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=9981, + serialized_end=10049, +) + + +_FOOREQUEST = _descriptor.Descriptor( + name='FooRequest', + full_name='protobuf_unittest.FooRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=10051, + serialized_end=10063, +) + + +_FOORESPONSE = _descriptor.Descriptor( + name='FooResponse', + full_name='protobuf_unittest.FooResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=10065, + serialized_end=10078, +) + + +_FOOCLIENTMESSAGE = _descriptor.Descriptor( + name='FooClientMessage', + full_name='protobuf_unittest.FooClientMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=10080, + serialized_end=10098, +) + + +_FOOSERVERMESSAGE = _descriptor.Descriptor( + name='FooServerMessage', + full_name='protobuf_unittest.FooServerMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=10100, + serialized_end=10118, +) + + +_BARREQUEST = _descriptor.Descriptor( + name='BarRequest', + full_name='protobuf_unittest.BarRequest', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=10120, + serialized_end=10132, +) + + +_BARRESPONSE = _descriptor.Descriptor( + name='BarResponse', + full_name='protobuf_unittest.BarResponse', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=10134, + serialized_end=10147, +) + +_TESTALLTYPES_NESTEDMESSAGE.containing_type = _TESTALLTYPES; +_TESTALLTYPES_OPTIONALGROUP.containing_type = _TESTALLTYPES; +_TESTALLTYPES_REPEATEDGROUP.containing_type = _TESTALLTYPES; +_TESTALLTYPES.fields_by_name['optionalgroup'].message_type = _TESTALLTYPES_OPTIONALGROUP +_TESTALLTYPES.fields_by_name['optional_nested_message'].message_type = _TESTALLTYPES_NESTEDMESSAGE +_TESTALLTYPES.fields_by_name['optional_foreign_message'].message_type = _FOREIGNMESSAGE +_TESTALLTYPES.fields_by_name['optional_import_message'].message_type = google.protobuf.unittest_import_pb2._IMPORTMESSAGE +_TESTALLTYPES.fields_by_name['optional_nested_enum'].enum_type = _TESTALLTYPES_NESTEDENUM +_TESTALLTYPES.fields_by_name['optional_foreign_enum'].enum_type = _FOREIGNENUM +_TESTALLTYPES.fields_by_name['optional_import_enum'].enum_type = google.protobuf.unittest_import_pb2._IMPORTENUM +_TESTALLTYPES.fields_by_name['optional_public_import_message'].message_type = google.protobuf.unittest_import_public_pb2._PUBLICIMPORTMESSAGE +_TESTALLTYPES.fields_by_name['optional_lazy_message'].message_type = _TESTALLTYPES_NESTEDMESSAGE +_TESTALLTYPES.fields_by_name['repeatedgroup'].message_type = _TESTALLTYPES_REPEATEDGROUP +_TESTALLTYPES.fields_by_name['repeated_nested_message'].message_type = _TESTALLTYPES_NESTEDMESSAGE +_TESTALLTYPES.fields_by_name['repeated_foreign_message'].message_type = _FOREIGNMESSAGE +_TESTALLTYPES.fields_by_name['repeated_import_message'].message_type = google.protobuf.unittest_import_pb2._IMPORTMESSAGE +_TESTALLTYPES.fields_by_name['repeated_nested_enum'].enum_type = _TESTALLTYPES_NESTEDENUM +_TESTALLTYPES.fields_by_name['repeated_foreign_enum'].enum_type = _FOREIGNENUM +_TESTALLTYPES.fields_by_name['repeated_import_enum'].enum_type = google.protobuf.unittest_import_pb2._IMPORTENUM +_TESTALLTYPES.fields_by_name['repeated_lazy_message'].message_type = _TESTALLTYPES_NESTEDMESSAGE +_TESTALLTYPES.fields_by_name['default_nested_enum'].enum_type = _TESTALLTYPES_NESTEDENUM +_TESTALLTYPES.fields_by_name['default_foreign_enum'].enum_type = _FOREIGNENUM +_TESTALLTYPES.fields_by_name['default_import_enum'].enum_type = google.protobuf.unittest_import_pb2._IMPORTENUM +_TESTALLTYPES_NESTEDENUM.containing_type = _TESTALLTYPES; +_TESTREQUIREDFOREIGN.fields_by_name['optional_message'].message_type = _TESTREQUIRED +_TESTREQUIREDFOREIGN.fields_by_name['repeated_message'].message_type = _TESTREQUIRED +_TESTFOREIGNNESTED.fields_by_name['foreign_nested'].message_type = _TESTALLTYPES_NESTEDMESSAGE +_TESTRECURSIVEMESSAGE.fields_by_name['a'].message_type = _TESTRECURSIVEMESSAGE +_TESTMUTUALRECURSIONA.fields_by_name['bb'].message_type = _TESTMUTUALRECURSIONB +_TESTMUTUALRECURSIONB.fields_by_name['a'].message_type = _TESTMUTUALRECURSIONA +_TESTDUPFIELDNUMBER_FOO.containing_type = _TESTDUPFIELDNUMBER; +_TESTDUPFIELDNUMBER_BAR.containing_type = _TESTDUPFIELDNUMBER; +_TESTDUPFIELDNUMBER.fields_by_name['foo'].message_type = _TESTDUPFIELDNUMBER_FOO +_TESTDUPFIELDNUMBER.fields_by_name['bar'].message_type = _TESTDUPFIELDNUMBER_BAR +_TESTEAGERMESSAGE.fields_by_name['sub_message'].message_type = _TESTALLTYPES +_TESTLAZYMESSAGE.fields_by_name['sub_message'].message_type = _TESTALLTYPES +_TESTNESTEDMESSAGEHASBITS_NESTEDMESSAGE.fields_by_name['nestedmessage_repeated_foreignmessage'].message_type = _FOREIGNMESSAGE +_TESTNESTEDMESSAGEHASBITS_NESTEDMESSAGE.containing_type = _TESTNESTEDMESSAGEHASBITS; +_TESTNESTEDMESSAGEHASBITS.fields_by_name['optional_nested_message'].message_type = _TESTNESTEDMESSAGEHASBITS_NESTEDMESSAGE +_TESTCAMELCASEFIELDNAMES.fields_by_name['EnumField'].enum_type = _FOREIGNENUM +_TESTCAMELCASEFIELDNAMES.fields_by_name['MessageField'].message_type = _FOREIGNMESSAGE +_TESTCAMELCASEFIELDNAMES.fields_by_name['RepeatedEnumField'].enum_type = _FOREIGNENUM +_TESTCAMELCASEFIELDNAMES.fields_by_name['RepeatedMessageField'].message_type = _FOREIGNMESSAGE +_SPARSEENUMMESSAGE.fields_by_name['sparse_enum'].enum_type = _TESTSPARSEENUM +_TESTPACKEDTYPES.fields_by_name['packed_enum'].enum_type = _FOREIGNENUM +_TESTUNPACKEDTYPES.fields_by_name['unpacked_enum'].enum_type = _FOREIGNENUM +_TESTDYNAMICEXTENSIONS_DYNAMICMESSAGETYPE.containing_type = _TESTDYNAMICEXTENSIONS; +_TESTDYNAMICEXTENSIONS.fields_by_name['enum_extension'].enum_type = _FOREIGNENUM +_TESTDYNAMICEXTENSIONS.fields_by_name['dynamic_enum_extension'].enum_type = _TESTDYNAMICEXTENSIONS_DYNAMICENUMTYPE +_TESTDYNAMICEXTENSIONS.fields_by_name['message_extension'].message_type = _FOREIGNMESSAGE +_TESTDYNAMICEXTENSIONS.fields_by_name['dynamic_message_extension'].message_type = _TESTDYNAMICEXTENSIONS_DYNAMICMESSAGETYPE +_TESTDYNAMICEXTENSIONS_DYNAMICENUMTYPE.containing_type = _TESTDYNAMICEXTENSIONS; +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR_GROUP1.fields_by_name['field1'].message_type = _TESTALLTYPES +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR_GROUP1.containing_type = _TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR; +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR_GROUP2.fields_by_name['field1'].message_type = _TESTALLTYPES +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR_GROUP2.containing_type = _TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR; +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR.fields_by_name['field1'].message_type = _TESTALLTYPES +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR.fields_by_name['field2'].message_type = _TESTALLTYPES +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR.fields_by_name['field3'].message_type = _TESTALLTYPES +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR.fields_by_name['group1'].message_type = _TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR_GROUP1 +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR.fields_by_name['group2'].message_type = _TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR_GROUP2 +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR.fields_by_name['ext1'].message_type = _TESTALLTYPES +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR.fields_by_name['ext2'].message_type = _TESTALLTYPES +_TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR.containing_type = _TESTPARSINGMERGE; +_TESTPARSINGMERGE_OPTIONALGROUP.fields_by_name['optional_group_all_types'].message_type = _TESTALLTYPES +_TESTPARSINGMERGE_OPTIONALGROUP.containing_type = _TESTPARSINGMERGE; +_TESTPARSINGMERGE_REPEATEDGROUP.fields_by_name['repeated_group_all_types'].message_type = _TESTALLTYPES +_TESTPARSINGMERGE_REPEATEDGROUP.containing_type = _TESTPARSINGMERGE; +_TESTPARSINGMERGE.fields_by_name['required_all_types'].message_type = _TESTALLTYPES +_TESTPARSINGMERGE.fields_by_name['optional_all_types'].message_type = _TESTALLTYPES +_TESTPARSINGMERGE.fields_by_name['repeated_all_types'].message_type = _TESTALLTYPES +_TESTPARSINGMERGE.fields_by_name['optionalgroup'].message_type = _TESTPARSINGMERGE_OPTIONALGROUP +_TESTPARSINGMERGE.fields_by_name['repeatedgroup'].message_type = _TESTPARSINGMERGE_REPEATEDGROUP +DESCRIPTOR.message_types_by_name['TestAllTypes'] = _TESTALLTYPES +DESCRIPTOR.message_types_by_name['TestDeprecatedFields'] = _TESTDEPRECATEDFIELDS +DESCRIPTOR.message_types_by_name['ForeignMessage'] = _FOREIGNMESSAGE +DESCRIPTOR.message_types_by_name['TestAllExtensions'] = _TESTALLEXTENSIONS +DESCRIPTOR.message_types_by_name['OptionalGroup_extension'] = _OPTIONALGROUP_EXTENSION +DESCRIPTOR.message_types_by_name['RepeatedGroup_extension'] = _REPEATEDGROUP_EXTENSION +DESCRIPTOR.message_types_by_name['TestNestedExtension'] = _TESTNESTEDEXTENSION +DESCRIPTOR.message_types_by_name['TestRequired'] = _TESTREQUIRED +DESCRIPTOR.message_types_by_name['TestRequiredForeign'] = _TESTREQUIREDFOREIGN +DESCRIPTOR.message_types_by_name['TestForeignNested'] = _TESTFOREIGNNESTED +DESCRIPTOR.message_types_by_name['TestEmptyMessage'] = _TESTEMPTYMESSAGE +DESCRIPTOR.message_types_by_name['TestEmptyMessageWithExtensions'] = _TESTEMPTYMESSAGEWITHEXTENSIONS +DESCRIPTOR.message_types_by_name['TestMultipleExtensionRanges'] = _TESTMULTIPLEEXTENSIONRANGES +DESCRIPTOR.message_types_by_name['TestReallyLargeTagNumber'] = _TESTREALLYLARGETAGNUMBER +DESCRIPTOR.message_types_by_name['TestRecursiveMessage'] = _TESTRECURSIVEMESSAGE +DESCRIPTOR.message_types_by_name['TestMutualRecursionA'] = _TESTMUTUALRECURSIONA +DESCRIPTOR.message_types_by_name['TestMutualRecursionB'] = _TESTMUTUALRECURSIONB +DESCRIPTOR.message_types_by_name['TestDupFieldNumber'] = _TESTDUPFIELDNUMBER +DESCRIPTOR.message_types_by_name['TestEagerMessage'] = _TESTEAGERMESSAGE +DESCRIPTOR.message_types_by_name['TestLazyMessage'] = _TESTLAZYMESSAGE +DESCRIPTOR.message_types_by_name['TestNestedMessageHasBits'] = _TESTNESTEDMESSAGEHASBITS +DESCRIPTOR.message_types_by_name['TestCamelCaseFieldNames'] = _TESTCAMELCASEFIELDNAMES +DESCRIPTOR.message_types_by_name['TestFieldOrderings'] = _TESTFIELDORDERINGS +DESCRIPTOR.message_types_by_name['TestExtremeDefaultValues'] = _TESTEXTREMEDEFAULTVALUES +DESCRIPTOR.message_types_by_name['SparseEnumMessage'] = _SPARSEENUMMESSAGE +DESCRIPTOR.message_types_by_name['OneString'] = _ONESTRING +DESCRIPTOR.message_types_by_name['MoreString'] = _MORESTRING +DESCRIPTOR.message_types_by_name['OneBytes'] = _ONEBYTES +DESCRIPTOR.message_types_by_name['MoreBytes'] = _MOREBYTES +DESCRIPTOR.message_types_by_name['TestPackedTypes'] = _TESTPACKEDTYPES +DESCRIPTOR.message_types_by_name['TestUnpackedTypes'] = _TESTUNPACKEDTYPES +DESCRIPTOR.message_types_by_name['TestPackedExtensions'] = _TESTPACKEDEXTENSIONS +DESCRIPTOR.message_types_by_name['TestDynamicExtensions'] = _TESTDYNAMICEXTENSIONS +DESCRIPTOR.message_types_by_name['TestRepeatedScalarDifferentTagSizes'] = _TESTREPEATEDSCALARDIFFERENTTAGSIZES +DESCRIPTOR.message_types_by_name['TestParsingMerge'] = _TESTPARSINGMERGE +DESCRIPTOR.message_types_by_name['TestCommentInjectionMessage'] = _TESTCOMMENTINJECTIONMESSAGE +DESCRIPTOR.message_types_by_name['FooRequest'] = _FOOREQUEST +DESCRIPTOR.message_types_by_name['FooResponse'] = _FOORESPONSE +DESCRIPTOR.message_types_by_name['FooClientMessage'] = _FOOCLIENTMESSAGE +DESCRIPTOR.message_types_by_name['FooServerMessage'] = _FOOSERVERMESSAGE +DESCRIPTOR.message_types_by_name['BarRequest'] = _BARREQUEST +DESCRIPTOR.message_types_by_name['BarResponse'] = _BARRESPONSE + +class TestAllTypes(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + + class NestedMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTALLTYPES_NESTEDMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestAllTypes.NestedMessage) + + class OptionalGroup(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTALLTYPES_OPTIONALGROUP + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestAllTypes.OptionalGroup) + + class RepeatedGroup(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTALLTYPES_REPEATEDGROUP + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestAllTypes.RepeatedGroup) + DESCRIPTOR = _TESTALLTYPES + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestAllTypes) + +class TestDeprecatedFields(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTDEPRECATEDFIELDS + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestDeprecatedFields) + +class ForeignMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _FOREIGNMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.ForeignMessage) + +class TestAllExtensions(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTALLEXTENSIONS + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestAllExtensions) + +class OptionalGroup_extension(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _OPTIONALGROUP_EXTENSION + + # @@protoc_insertion_point(class_scope:protobuf_unittest.OptionalGroup_extension) + +class RepeatedGroup_extension(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _REPEATEDGROUP_EXTENSION + + # @@protoc_insertion_point(class_scope:protobuf_unittest.RepeatedGroup_extension) + +class TestNestedExtension(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTNESTEDEXTENSION + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestNestedExtension) + +class TestRequired(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTREQUIRED + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestRequired) + +class TestRequiredForeign(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTREQUIREDFOREIGN + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestRequiredForeign) + +class TestForeignNested(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTFOREIGNNESTED + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestForeignNested) + +class TestEmptyMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTEMPTYMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestEmptyMessage) + +class TestEmptyMessageWithExtensions(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTEMPTYMESSAGEWITHEXTENSIONS + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestEmptyMessageWithExtensions) + +class TestMultipleExtensionRanges(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTMULTIPLEEXTENSIONRANGES + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestMultipleExtensionRanges) + +class TestReallyLargeTagNumber(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTREALLYLARGETAGNUMBER + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestReallyLargeTagNumber) + +class TestRecursiveMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTRECURSIVEMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestRecursiveMessage) + +class TestMutualRecursionA(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTMUTUALRECURSIONA + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestMutualRecursionA) + +class TestMutualRecursionB(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTMUTUALRECURSIONB + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestMutualRecursionB) + +class TestDupFieldNumber(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + + class Foo(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTDUPFIELDNUMBER_FOO + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestDupFieldNumber.Foo) + + class Bar(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTDUPFIELDNUMBER_BAR + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestDupFieldNumber.Bar) + DESCRIPTOR = _TESTDUPFIELDNUMBER + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestDupFieldNumber) + +class TestEagerMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTEAGERMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestEagerMessage) + +class TestLazyMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTLAZYMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestLazyMessage) + +class TestNestedMessageHasBits(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + + class NestedMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTNESTEDMESSAGEHASBITS_NESTEDMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestNestedMessageHasBits.NestedMessage) + DESCRIPTOR = _TESTNESTEDMESSAGEHASBITS + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestNestedMessageHasBits) + +class TestCamelCaseFieldNames(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTCAMELCASEFIELDNAMES + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestCamelCaseFieldNames) + +class TestFieldOrderings(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTFIELDORDERINGS + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestFieldOrderings) + +class TestExtremeDefaultValues(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTEXTREMEDEFAULTVALUES + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestExtremeDefaultValues) + +class SparseEnumMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _SPARSEENUMMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.SparseEnumMessage) + +class OneString(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _ONESTRING + + # @@protoc_insertion_point(class_scope:protobuf_unittest.OneString) + +class MoreString(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _MORESTRING + + # @@protoc_insertion_point(class_scope:protobuf_unittest.MoreString) + +class OneBytes(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _ONEBYTES + + # @@protoc_insertion_point(class_scope:protobuf_unittest.OneBytes) + +class MoreBytes(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _MOREBYTES + + # @@protoc_insertion_point(class_scope:protobuf_unittest.MoreBytes) + +class TestPackedTypes(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTPACKEDTYPES + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestPackedTypes) + +class TestUnpackedTypes(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTUNPACKEDTYPES + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestUnpackedTypes) + +class TestPackedExtensions(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTPACKEDEXTENSIONS + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestPackedExtensions) + +class TestDynamicExtensions(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + + class DynamicMessageType(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTDYNAMICEXTENSIONS_DYNAMICMESSAGETYPE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestDynamicExtensions.DynamicMessageType) + DESCRIPTOR = _TESTDYNAMICEXTENSIONS + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestDynamicExtensions) + +class TestRepeatedScalarDifferentTagSizes(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTREPEATEDSCALARDIFFERENTTAGSIZES + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestRepeatedScalarDifferentTagSizes) + +class TestParsingMerge(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + + class RepeatedFieldsGenerator(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + + class Group1(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR_GROUP1 + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.Group1) + + class Group2(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR_GROUP2 + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator.Group2) + DESCRIPTOR = _TESTPARSINGMERGE_REPEATEDFIELDSGENERATOR + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestParsingMerge.RepeatedFieldsGenerator) + + class OptionalGroup(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTPARSINGMERGE_OPTIONALGROUP + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestParsingMerge.OptionalGroup) + + class RepeatedGroup(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTPARSINGMERGE_REPEATEDGROUP + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestParsingMerge.RepeatedGroup) + DESCRIPTOR = _TESTPARSINGMERGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestParsingMerge) + +class TestCommentInjectionMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TESTCOMMENTINJECTIONMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.TestCommentInjectionMessage) + +class FooRequest(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _FOOREQUEST + + # @@protoc_insertion_point(class_scope:protobuf_unittest.FooRequest) + +class FooResponse(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _FOORESPONSE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.FooResponse) + +class FooClientMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _FOOCLIENTMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.FooClientMessage) + +class FooServerMessage(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _FOOSERVERMESSAGE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.FooServerMessage) + +class BarRequest(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _BARREQUEST + + # @@protoc_insertion_point(class_scope:protobuf_unittest.BarRequest) + +class BarResponse(_message.Message): + __metaclass__ = _reflection.GeneratedProtocolMessageType + DESCRIPTOR = _BARRESPONSE + + # @@protoc_insertion_point(class_scope:protobuf_unittest.BarResponse) + +TestAllExtensions.RegisterExtension(optional_int32_extension) +TestAllExtensions.RegisterExtension(optional_int64_extension) +TestAllExtensions.RegisterExtension(optional_uint32_extension) +TestAllExtensions.RegisterExtension(optional_uint64_extension) +TestAllExtensions.RegisterExtension(optional_sint32_extension) +TestAllExtensions.RegisterExtension(optional_sint64_extension) +TestAllExtensions.RegisterExtension(optional_fixed32_extension) +TestAllExtensions.RegisterExtension(optional_fixed64_extension) +TestAllExtensions.RegisterExtension(optional_sfixed32_extension) +TestAllExtensions.RegisterExtension(optional_sfixed64_extension) +TestAllExtensions.RegisterExtension(optional_float_extension) +TestAllExtensions.RegisterExtension(optional_double_extension) +TestAllExtensions.RegisterExtension(optional_bool_extension) +TestAllExtensions.RegisterExtension(optional_string_extension) +TestAllExtensions.RegisterExtension(optional_bytes_extension) +optionalgroup_extension.message_type = _OPTIONALGROUP_EXTENSION +TestAllExtensions.RegisterExtension(optionalgroup_extension) +optional_nested_message_extension.message_type = _TESTALLTYPES_NESTEDMESSAGE +TestAllExtensions.RegisterExtension(optional_nested_message_extension) +optional_foreign_message_extension.message_type = _FOREIGNMESSAGE +TestAllExtensions.RegisterExtension(optional_foreign_message_extension) +optional_import_message_extension.message_type = google.protobuf.unittest_import_pb2._IMPORTMESSAGE +TestAllExtensions.RegisterExtension(optional_import_message_extension) +optional_nested_enum_extension.enum_type = _TESTALLTYPES_NESTEDENUM +TestAllExtensions.RegisterExtension(optional_nested_enum_extension) +optional_foreign_enum_extension.enum_type = _FOREIGNENUM +TestAllExtensions.RegisterExtension(optional_foreign_enum_extension) +optional_import_enum_extension.enum_type = google.protobuf.unittest_import_pb2._IMPORTENUM +TestAllExtensions.RegisterExtension(optional_import_enum_extension) +TestAllExtensions.RegisterExtension(optional_string_piece_extension) +TestAllExtensions.RegisterExtension(optional_cord_extension) +optional_public_import_message_extension.message_type = google.protobuf.unittest_import_public_pb2._PUBLICIMPORTMESSAGE +TestAllExtensions.RegisterExtension(optional_public_import_message_extension) +optional_lazy_message_extension.message_type = _TESTALLTYPES_NESTEDMESSAGE +TestAllExtensions.RegisterExtension(optional_lazy_message_extension) +TestAllExtensions.RegisterExtension(repeated_int32_extension) +TestAllExtensions.RegisterExtension(repeated_int64_extension) +TestAllExtensions.RegisterExtension(repeated_uint32_extension) +TestAllExtensions.RegisterExtension(repeated_uint64_extension) +TestAllExtensions.RegisterExtension(repeated_sint32_extension) +TestAllExtensions.RegisterExtension(repeated_sint64_extension) +TestAllExtensions.RegisterExtension(repeated_fixed32_extension) +TestAllExtensions.RegisterExtension(repeated_fixed64_extension) +TestAllExtensions.RegisterExtension(repeated_sfixed32_extension) +TestAllExtensions.RegisterExtension(repeated_sfixed64_extension) +TestAllExtensions.RegisterExtension(repeated_float_extension) +TestAllExtensions.RegisterExtension(repeated_double_extension) +TestAllExtensions.RegisterExtension(repeated_bool_extension) +TestAllExtensions.RegisterExtension(repeated_string_extension) +TestAllExtensions.RegisterExtension(repeated_bytes_extension) +repeatedgroup_extension.message_type = _REPEATEDGROUP_EXTENSION +TestAllExtensions.RegisterExtension(repeatedgroup_extension) +repeated_nested_message_extension.message_type = _TESTALLTYPES_NESTEDMESSAGE +TestAllExtensions.RegisterExtension(repeated_nested_message_extension) +repeated_foreign_message_extension.message_type = _FOREIGNMESSAGE +TestAllExtensions.RegisterExtension(repeated_foreign_message_extension) +repeated_import_message_extension.message_type = google.protobuf.unittest_import_pb2._IMPORTMESSAGE +TestAllExtensions.RegisterExtension(repeated_import_message_extension) +repeated_nested_enum_extension.enum_type = _TESTALLTYPES_NESTEDENUM +TestAllExtensions.RegisterExtension(repeated_nested_enum_extension) +repeated_foreign_enum_extension.enum_type = _FOREIGNENUM +TestAllExtensions.RegisterExtension(repeated_foreign_enum_extension) +repeated_import_enum_extension.enum_type = google.protobuf.unittest_import_pb2._IMPORTENUM +TestAllExtensions.RegisterExtension(repeated_import_enum_extension) +TestAllExtensions.RegisterExtension(repeated_string_piece_extension) +TestAllExtensions.RegisterExtension(repeated_cord_extension) +repeated_lazy_message_extension.message_type = _TESTALLTYPES_NESTEDMESSAGE +TestAllExtensions.RegisterExtension(repeated_lazy_message_extension) +TestAllExtensions.RegisterExtension(default_int32_extension) +TestAllExtensions.RegisterExtension(default_int64_extension) +TestAllExtensions.RegisterExtension(default_uint32_extension) +TestAllExtensions.RegisterExtension(default_uint64_extension) +TestAllExtensions.RegisterExtension(default_sint32_extension) +TestAllExtensions.RegisterExtension(default_sint64_extension) +TestAllExtensions.RegisterExtension(default_fixed32_extension) +TestAllExtensions.RegisterExtension(default_fixed64_extension) +TestAllExtensions.RegisterExtension(default_sfixed32_extension) +TestAllExtensions.RegisterExtension(default_sfixed64_extension) +TestAllExtensions.RegisterExtension(default_float_extension) +TestAllExtensions.RegisterExtension(default_double_extension) +TestAllExtensions.RegisterExtension(default_bool_extension) +TestAllExtensions.RegisterExtension(default_string_extension) +TestAllExtensions.RegisterExtension(default_bytes_extension) +default_nested_enum_extension.enum_type = _TESTALLTYPES_NESTEDENUM +TestAllExtensions.RegisterExtension(default_nested_enum_extension) +default_foreign_enum_extension.enum_type = _FOREIGNENUM +TestAllExtensions.RegisterExtension(default_foreign_enum_extension) +default_import_enum_extension.enum_type = google.protobuf.unittest_import_pb2._IMPORTENUM +TestAllExtensions.RegisterExtension(default_import_enum_extension) +TestAllExtensions.RegisterExtension(default_string_piece_extension) +TestAllExtensions.RegisterExtension(default_cord_extension) +TestFieldOrderings.RegisterExtension(my_extension_string) +TestFieldOrderings.RegisterExtension(my_extension_int) +TestPackedExtensions.RegisterExtension(packed_int32_extension) +TestPackedExtensions.RegisterExtension(packed_int64_extension) +TestPackedExtensions.RegisterExtension(packed_uint32_extension) +TestPackedExtensions.RegisterExtension(packed_uint64_extension) +TestPackedExtensions.RegisterExtension(packed_sint32_extension) +TestPackedExtensions.RegisterExtension(packed_sint64_extension) +TestPackedExtensions.RegisterExtension(packed_fixed32_extension) +TestPackedExtensions.RegisterExtension(packed_fixed64_extension) +TestPackedExtensions.RegisterExtension(packed_sfixed32_extension) +TestPackedExtensions.RegisterExtension(packed_sfixed64_extension) +TestPackedExtensions.RegisterExtension(packed_float_extension) +TestPackedExtensions.RegisterExtension(packed_double_extension) +TestPackedExtensions.RegisterExtension(packed_bool_extension) +packed_enum_extension.enum_type = _FOREIGNENUM +TestPackedExtensions.RegisterExtension(packed_enum_extension) +TestAllExtensions.RegisterExtension(_TESTNESTEDEXTENSION.extensions_by_name['test']) +_TESTREQUIRED.extensions_by_name['single'].message_type = _TESTREQUIRED +TestAllExtensions.RegisterExtension(_TESTREQUIRED.extensions_by_name['single']) +_TESTREQUIRED.extensions_by_name['multi'].message_type = _TESTREQUIRED +TestAllExtensions.RegisterExtension(_TESTREQUIRED.extensions_by_name['multi']) +_TESTPARSINGMERGE.extensions_by_name['optional_ext'].message_type = _TESTALLTYPES +TestParsingMerge.RegisterExtension(_TESTPARSINGMERGE.extensions_by_name['optional_ext']) +_TESTPARSINGMERGE.extensions_by_name['repeated_ext'].message_type = _TESTALLTYPES +TestParsingMerge.RegisterExtension(_TESTPARSINGMERGE.extensions_by_name['repeated_ext']) + +DESCRIPTOR.has_options = True +DESCRIPTOR._options = _descriptor._ParseOptions(descriptor_pb2.FileOptions(), 'B\rUnittestProtoH\001\200\001\001\210\001\001\220\001\001') +_TESTENUMWITHDUPVALUE.has_options = True +_TESTENUMWITHDUPVALUE._options = _descriptor._ParseOptions(descriptor_pb2.EnumOptions(), '\020\001') +optional_string_piece_extension.has_options = True +optional_string_piece_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002') +optional_cord_extension.has_options = True +optional_cord_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001') +optional_lazy_message_extension.has_options = True +optional_lazy_message_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '(\001') +repeated_string_piece_extension.has_options = True +repeated_string_piece_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002') +repeated_cord_extension.has_options = True +repeated_cord_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001') +repeated_lazy_message_extension.has_options = True +repeated_lazy_message_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '(\001') +default_string_piece_extension.has_options = True +default_string_piece_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002') +default_cord_extension.has_options = True +default_cord_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001') +packed_int32_extension.has_options = True +packed_int32_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +packed_int64_extension.has_options = True +packed_int64_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +packed_uint32_extension.has_options = True +packed_uint32_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +packed_uint64_extension.has_options = True +packed_uint64_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +packed_sint32_extension.has_options = True +packed_sint32_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +packed_sint64_extension.has_options = True +packed_sint64_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +packed_fixed32_extension.has_options = True +packed_fixed32_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +packed_fixed64_extension.has_options = True +packed_fixed64_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +packed_sfixed32_extension.has_options = True +packed_sfixed32_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +packed_sfixed64_extension.has_options = True +packed_sfixed64_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +packed_float_extension.has_options = True +packed_float_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +packed_double_extension.has_options = True +packed_double_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +packed_bool_extension.has_options = True +packed_bool_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +packed_enum_extension.has_options = True +packed_enum_extension._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTALLTYPES.fields_by_name['optional_string_piece'].has_options = True +_TESTALLTYPES.fields_by_name['optional_string_piece']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002') +_TESTALLTYPES.fields_by_name['optional_cord'].has_options = True +_TESTALLTYPES.fields_by_name['optional_cord']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001') +_TESTALLTYPES.fields_by_name['optional_lazy_message'].has_options = True +_TESTALLTYPES.fields_by_name['optional_lazy_message']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '(\001') +_TESTALLTYPES.fields_by_name['repeated_string_piece'].has_options = True +_TESTALLTYPES.fields_by_name['repeated_string_piece']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002') +_TESTALLTYPES.fields_by_name['repeated_cord'].has_options = True +_TESTALLTYPES.fields_by_name['repeated_cord']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001') +_TESTALLTYPES.fields_by_name['repeated_lazy_message'].has_options = True +_TESTALLTYPES.fields_by_name['repeated_lazy_message']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '(\001') +_TESTALLTYPES.fields_by_name['default_string_piece'].has_options = True +_TESTALLTYPES.fields_by_name['default_string_piece']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002') +_TESTALLTYPES.fields_by_name['default_cord'].has_options = True +_TESTALLTYPES.fields_by_name['default_cord']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001') +_TESTDEPRECATEDFIELDS.fields_by_name['deprecated_int32'].has_options = True +_TESTDEPRECATEDFIELDS.fields_by_name['deprecated_int32']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\030\001') +_TESTEAGERMESSAGE.fields_by_name['sub_message'].has_options = True +_TESTEAGERMESSAGE.fields_by_name['sub_message']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '(\000') +_TESTLAZYMESSAGE.fields_by_name['sub_message'].has_options = True +_TESTLAZYMESSAGE.fields_by_name['sub_message']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '(\001') +_TESTCAMELCASEFIELDNAMES.fields_by_name['StringPieceField'].has_options = True +_TESTCAMELCASEFIELDNAMES.fields_by_name['StringPieceField']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002') +_TESTCAMELCASEFIELDNAMES.fields_by_name['CordField'].has_options = True +_TESTCAMELCASEFIELDNAMES.fields_by_name['CordField']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001') +_TESTCAMELCASEFIELDNAMES.fields_by_name['RepeatedStringPieceField'].has_options = True +_TESTCAMELCASEFIELDNAMES.fields_by_name['RepeatedStringPieceField']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002') +_TESTCAMELCASEFIELDNAMES.fields_by_name['RepeatedCordField'].has_options = True +_TESTCAMELCASEFIELDNAMES.fields_by_name['RepeatedCordField']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001') +_TESTEXTREMEDEFAULTVALUES.fields_by_name['string_piece_with_zero'].has_options = True +_TESTEXTREMEDEFAULTVALUES.fields_by_name['string_piece_with_zero']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\002') +_TESTEXTREMEDEFAULTVALUES.fields_by_name['cord_with_zero'].has_options = True +_TESTEXTREMEDEFAULTVALUES.fields_by_name['cord_with_zero']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\010\001') +_TESTPACKEDTYPES.fields_by_name['packed_int32'].has_options = True +_TESTPACKEDTYPES.fields_by_name['packed_int32']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTPACKEDTYPES.fields_by_name['packed_int64'].has_options = True +_TESTPACKEDTYPES.fields_by_name['packed_int64']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTPACKEDTYPES.fields_by_name['packed_uint32'].has_options = True +_TESTPACKEDTYPES.fields_by_name['packed_uint32']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTPACKEDTYPES.fields_by_name['packed_uint64'].has_options = True +_TESTPACKEDTYPES.fields_by_name['packed_uint64']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTPACKEDTYPES.fields_by_name['packed_sint32'].has_options = True +_TESTPACKEDTYPES.fields_by_name['packed_sint32']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTPACKEDTYPES.fields_by_name['packed_sint64'].has_options = True +_TESTPACKEDTYPES.fields_by_name['packed_sint64']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTPACKEDTYPES.fields_by_name['packed_fixed32'].has_options = True +_TESTPACKEDTYPES.fields_by_name['packed_fixed32']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTPACKEDTYPES.fields_by_name['packed_fixed64'].has_options = True +_TESTPACKEDTYPES.fields_by_name['packed_fixed64']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTPACKEDTYPES.fields_by_name['packed_sfixed32'].has_options = True +_TESTPACKEDTYPES.fields_by_name['packed_sfixed32']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTPACKEDTYPES.fields_by_name['packed_sfixed64'].has_options = True +_TESTPACKEDTYPES.fields_by_name['packed_sfixed64']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTPACKEDTYPES.fields_by_name['packed_float'].has_options = True +_TESTPACKEDTYPES.fields_by_name['packed_float']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTPACKEDTYPES.fields_by_name['packed_double'].has_options = True +_TESTPACKEDTYPES.fields_by_name['packed_double']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTPACKEDTYPES.fields_by_name['packed_bool'].has_options = True +_TESTPACKEDTYPES.fields_by_name['packed_bool']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTPACKEDTYPES.fields_by_name['packed_enum'].has_options = True +_TESTPACKEDTYPES.fields_by_name['packed_enum']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') +_TESTUNPACKEDTYPES.fields_by_name['unpacked_int32'].has_options = True +_TESTUNPACKEDTYPES.fields_by_name['unpacked_int32']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000') +_TESTUNPACKEDTYPES.fields_by_name['unpacked_int64'].has_options = True +_TESTUNPACKEDTYPES.fields_by_name['unpacked_int64']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000') +_TESTUNPACKEDTYPES.fields_by_name['unpacked_uint32'].has_options = True +_TESTUNPACKEDTYPES.fields_by_name['unpacked_uint32']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000') +_TESTUNPACKEDTYPES.fields_by_name['unpacked_uint64'].has_options = True +_TESTUNPACKEDTYPES.fields_by_name['unpacked_uint64']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000') +_TESTUNPACKEDTYPES.fields_by_name['unpacked_sint32'].has_options = True +_TESTUNPACKEDTYPES.fields_by_name['unpacked_sint32']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000') +_TESTUNPACKEDTYPES.fields_by_name['unpacked_sint64'].has_options = True +_TESTUNPACKEDTYPES.fields_by_name['unpacked_sint64']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000') +_TESTUNPACKEDTYPES.fields_by_name['unpacked_fixed32'].has_options = True +_TESTUNPACKEDTYPES.fields_by_name['unpacked_fixed32']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000') +_TESTUNPACKEDTYPES.fields_by_name['unpacked_fixed64'].has_options = True +_TESTUNPACKEDTYPES.fields_by_name['unpacked_fixed64']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000') +_TESTUNPACKEDTYPES.fields_by_name['unpacked_sfixed32'].has_options = True +_TESTUNPACKEDTYPES.fields_by_name['unpacked_sfixed32']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000') +_TESTUNPACKEDTYPES.fields_by_name['unpacked_sfixed64'].has_options = True +_TESTUNPACKEDTYPES.fields_by_name['unpacked_sfixed64']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000') +_TESTUNPACKEDTYPES.fields_by_name['unpacked_float'].has_options = True +_TESTUNPACKEDTYPES.fields_by_name['unpacked_float']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000') +_TESTUNPACKEDTYPES.fields_by_name['unpacked_double'].has_options = True +_TESTUNPACKEDTYPES.fields_by_name['unpacked_double']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000') +_TESTUNPACKEDTYPES.fields_by_name['unpacked_bool'].has_options = True +_TESTUNPACKEDTYPES.fields_by_name['unpacked_bool']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000') +_TESTUNPACKEDTYPES.fields_by_name['unpacked_enum'].has_options = True +_TESTUNPACKEDTYPES.fields_by_name['unpacked_enum']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\000') +_TESTDYNAMICEXTENSIONS.fields_by_name['packed_extension'].has_options = True +_TESTDYNAMICEXTENSIONS.fields_by_name['packed_extension']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), '\020\001') + +_TESTSERVICE = _descriptor.ServiceDescriptor( + name='TestService', + full_name='protobuf_unittest.TestService', + file=DESCRIPTOR, + index=0, + options=None, + serialized_start=10433, + serialized_end=10586, + methods=[ + _descriptor.MethodDescriptor( + name='Foo', + full_name='protobuf_unittest.TestService.Foo', + index=0, + containing_service=None, + input_type=_FOOREQUEST, + output_type=_FOORESPONSE, + options=None, + ), + _descriptor.MethodDescriptor( + name='Bar', + full_name='protobuf_unittest.TestService.Bar', + index=1, + containing_service=None, + input_type=_BARREQUEST, + output_type=_BARRESPONSE, + options=None, + ), +]) + +class TestService(_service.Service): + __metaclass__ = service_reflection.GeneratedServiceType + DESCRIPTOR = _TESTSERVICE +class TestService_Stub(TestService): + __metaclass__ = service_reflection.GeneratedServiceStubType + DESCRIPTOR = _TESTSERVICE + +# @@protoc_insertion_point(module_scope) diff --git a/code/push/igetui/__init__.py b/code/push/igetui/__init__.py new file mode 100644 index 0000000..4365a5b --- /dev/null +++ b/code/push/igetui/__init__.py @@ -0,0 +1,2 @@ +__author__ = 'wei' +__all__=["igt_message", "igt_target"] diff --git a/code/push/igetui/igt_message.py b/code/push/igetui/igt_message.py new file mode 100644 index 0000000..096d0db --- /dev/null +++ b/code/push/igetui/igt_message.py @@ -0,0 +1,24 @@ +__author__ = 'wei' + +from push.igetui.template.igt_base_template import * +class IGtMessage: + def __init__(self): + self.isOffline = False + self.offlineExpireTime = 0 + self.data = BaseTemplate() + +class IGtSingleMessage(IGtMessage) : + def __init__(self): + IGtMessage.__init__(self) + +class IGtListMessage(IGtMessage): + def __init__(self): + IGtMessage.__init__(self) + +class IGtAppMessage(IGtMessage): + def __init__(self): + IGtMessage.__init__(self) + self.appIdList = [] + self.phoneTypeList = [] + self.provinceList = [] + self.tagList = [] diff --git a/code/push/igetui/igt_target.py b/code/push/igetui/igt_target.py new file mode 100644 index 0000000..032fa0e --- /dev/null +++ b/code/push/igetui/igt_target.py @@ -0,0 +1,6 @@ +__author__ = 'wei' + +class Target : + def __init__(self): + self.appId = "" + self.clientId = "" \ No newline at end of file diff --git a/code/push/igetui/template/__init__.py b/code/push/igetui/template/__init__.py new file mode 100644 index 0000000..6f0b00f --- /dev/null +++ b/code/push/igetui/template/__init__.py @@ -0,0 +1,2 @@ +__author__ = 'wei' +__all__=["igt_base_template", "igt_link_template", "igt_notification_template", "igt_transmission_template" ] \ No newline at end of file diff --git a/code/push/igetui/template/igt_base_template.py b/code/push/igetui/template/igt_base_template.py new file mode 100644 index 0000000..7ddfa6d --- /dev/null +++ b/code/push/igetui/template/igt_base_template.py @@ -0,0 +1,103 @@ +#coding: utf-8 + +from push.protobuf import * +import json + + +class BaseTemplate: + def __init__(self): + self.appKey = "" + self.appId = "" + self.pushInfo = None + + def getTransparent(self): + transparent = gt_req_pb2.Transparent() + transparent.id = "" + transparent.action = "pushmessage" + transparent.taskId = "" + transparent.appKey = self.appKey + transparent.appId = self.appId + transparent.messageId = "" + transparent.pushInfo.CopyFrom(self.getPushInfo()) + actionChains = self.getActionChains() + for actionChain in actionChains: + tmp = transparent.actionChain.add() + tmp.CopyFrom(actionChain) + return transparent + + def getActionChains(self): + return [] + + def getPushInfo(self): + if self.pushInfo is None: + self.pushInfo = gt_req_pb2.PushInfo() + self.pushInfo.message = "" + self.pushInfo.actionKey = "" + self.pushInfo.sound = "" + self.pushInfo.badge = "" + return self.pushInfo + + def setPushInfo(self, actionLocKey, badge, message, sound, payload, locKey, locArgs, launchImage): + self.pushInfo = gt_req_pb2.PushInfo() + self.pushInfo.actionLocKey = actionLocKey + self.pushInfo.badge = str(badge) + self.pushInfo.message = message.decode("utf-8") + self.pushInfo.sound = sound + self.pushInfo.payload = payload + self.pushInfo.locKey = locKey + self.pushInfo.locArgs = locArgs + self.pushInfo.launchImage = launchImage + + isValidate = self.validatePayload(locKey, locArgs, message, actionLocKey, launchImage, str(badge), sound, payload) + if isValidate is False: + payloadLen = self.validatePayloadLength(locKey, locArgs, message, actionLocKey, launchImage, str(badge), sound, payload) + raise Exception("PushInfo length over limit: " + str(payloadLen) + ". Allowed: 256.") + + + def processPayload(self, locKey, locArgs, message, actionLocKey, launchImage, badge, sound, payload): + map = {} + apnsMap = {} + alertMap = {} + + if sound is not None and len(sound) > 0: + apnsMap["sound"] = sound + else: + apnsMap["sound"] = "default" + if launchImage is not None and len(launchImage) > 0: + alertMap["launch-image"] = launchImage + if locKey is not None and len(locKey) > 0: + alertMap["loc-key"] = locKey + if locArgs is not None and len(locArgs) > 0: + alertMap["loc-args"] = locArgs.split(",") + elif message is not None and len(message) > 0: + alertMap["body"] = message + + if actionLocKey is not None and len(actionLocKey) > 0: + alertMap["action-loc-key"] = actionLocKey + + apnsMap["badge"] = self.toInt(badge, 0) + + if payload is not None and len(payload) > 0: + map["payload"] = payload + + map["aps"] = apnsMap + apnsMap["alert"] = alertMap + return map + + def validatePayload(self, locKey, locArgs, message, actionLocKey, launchImage, badge, sound, payload): + map = self.processPayload(locKey, locArgs, message, actionLocKey, launchImage, badge, sound, payload) + jsonData = json.dumps(map, separators=(',', ':'), ensure_ascii=False) + if len(jsonData)>256: + return False + return True + + def validatePayloadLength(self, locKey, locArgs, message, actionLocKey, launchImage, badge, sound, payload): + map = self.processPayload(locKey, locArgs, message, actionLocKey, launchImage, badge, sound, payload) + jsonData = json.dumps(map, separators=(',', ':'), ensure_ascii=False) + return len(jsonData) + + def toInt(self, strr, defaultValue): + if strr is None or strr == "": + return defaultValue + return int(strr) + diff --git a/code/push/igetui/template/igt_link_template.py b/code/push/igetui/template/igt_link_template.py new file mode 100644 index 0000000..3f859de --- /dev/null +++ b/code/push/igetui/template/igt_link_template.py @@ -0,0 +1,59 @@ +__author__ = 'wei' + +from push.protobuf import * +import igt_base_template + +class LinkTemplate(igt_base_template.BaseTemplate): + def __init__(self): + igt_base_template.BaseTemplate.__init__(self) + self.text = "" + self.title = "" + self.logo = "" + self.logoURL = "" + self.url = "" + self.isRing = True + self.isVibrate = True + self.isClearable = True + self.pushType = "NotifyMsg" + + def getActionChains(self): + #set actionchain + actionChain1 = gt_req_pb2.ActionChain() + actionChain1.actionId = 1 + actionChain1.type = gt_req_pb2.ActionChain.Goto + actionChain1.next = 10000 + + #start up app + actionChain2 = gt_req_pb2.ActionChain() + actionChain2.actionId = 10000 + actionChain2.type = gt_req_pb2.ActionChain.notification + actionChain2.title = self.title + actionChain2.text = self.text + actionChain2.logo = self.logo + actionChain2.logoURL = self.logoURL + actionChain2.ring = self.isRing + actionChain2.clearable = self.isClearable + actionChain2.buzz = self.isVibrate + actionChain2.next = 10010 + + #goto + actionChain3 = gt_req_pb2.ActionChain() + actionChain3.actionId = 10010 + actionChain3.type = gt_req_pb2.ActionChain.Goto + actionChain3.next = 10030 + + #start web + actionChain4 = gt_req_pb2.ActionChain() + actionChain4.actionId = 10030 + actionChain4.type = gt_req_pb2.ActionChain.startweb + actionChain4.url = self.url + actionChain4.next = 100 + + #end + actionChain5 = gt_req_pb2.ActionChain() + actionChain5.actionId = 100 + actionChain5.type = gt_req_pb2.ActionChain.eoa + + actionChains = [actionChain1, actionChain2, actionChain3, actionChain4, actionChain5] + + return actionChains diff --git a/code/push/igetui/template/igt_notification_template.py b/code/push/igetui/template/igt_notification_template.py new file mode 100644 index 0000000..4f2919c --- /dev/null +++ b/code/push/igetui/template/igt_notification_template.py @@ -0,0 +1,69 @@ +__author__ = 'wei' + +from push.protobuf import * +import igt_base_template + +class NotificationTemplate(igt_base_template.BaseTemplate): + def __init__(self): + igt_base_template.BaseTemplate.__init__(self) + self.text = "" + self.title = "" + self.logo = "" + self.logoURL = "" + self.transmissionType = 0 + self.transmissionContent = "" + self.isRing = True + self.isVibrate = True + self.isClearable = True + self.pushType = "NotifyMsg" + + def getActionChains(self): + #set actionchain + actionChain1 = gt_req_pb2.ActionChain() + actionChain1.actionId = 1 + actionChain1.type = gt_req_pb2.ActionChain.Goto + actionChain1.next = 10000 + + #notification + actionChain2 = gt_req_pb2.ActionChain() + actionChain2.actionId = 10000 + actionChain2.type = gt_req_pb2.ActionChain.notification + actionChain2.title = self.title + actionChain2.text = self.text + actionChain2.logo = self.logo + actionChain2.logoURL = self.logoURL + actionChain2.ring = self.isRing + actionChain2.clearable = self.isClearable + actionChain2.buzz = self.isVibrate + actionChain2.next = 10010 + + #goto + actionChain3 = gt_req_pb2.ActionChain() + actionChain3.actionId = 10010 + actionChain3.type = gt_req_pb2.ActionChain.Goto + actionChain3.next = 10030 + + #appStartUp + appStartUp = gt_req_pb2.AppStartUp() + appStartUp.android = "" + appStartUp.symbia = "" + appStartUp.ios = "" + + #start web + actionChain4 = gt_req_pb2.ActionChain() + actionChain4.actionId = 10030 + actionChain4.type = gt_req_pb2.ActionChain.startapp + actionChain4.appid = ""; + actionChain4.autostart = (True if self.transmissionType == 1 else False) + actionChain4.appstartupid.CopyFrom(appStartUp) + actionChain4.failedAction = 100 + actionChain4.next = 100 + + #end + actionChain5 = gt_req_pb2.ActionChain() + actionChain5.actionId = 100 + actionChain5.type = gt_req_pb2.ActionChain.eoa + + actionChains = [actionChain1, actionChain2, actionChain3, actionChain4, actionChain5] + + return actionChains diff --git a/code/push/igetui/template/igt_notypopload_template.py b/code/push/igetui/template/igt_notypopload_template.py new file mode 100644 index 0000000..53b5778 --- /dev/null +++ b/code/push/igetui/template/igt_notypopload_template.py @@ -0,0 +1,92 @@ +__author__ = 'Kevin' + +from push.protobuf import * +import igt_base_template + +class NotyPopLoadTemplate(igt_base_template.BaseTemplate): + def __init__(self): + igt_base_template.BaseTemplate.__init__(self) + self.notyIcon = "" + self.logoUrl = "" + self.notyTitle = "" + self.notyContent = "" + self.isRing = True + self.isVibrate = True + self.isClearable = True + self.popTitle = "" + self.popContent = "" + self.popImage = "" + self.popButton1 = "" + self.popButton2 = "" + self.loadIcon = "" + self.loadTitle = "" + self.loadUrl = "" + self.transmissionType = 0 + self.transmissionContent = "" + self.isAutoInstall = False + self.isActive = False + self.pushType = "NotyPopLoadMsg" + + def getActionChains(self): + #set actionChain + actionChain1 = gt_req_pb2.ActionChain() + actionChain1.actionId = 1 + actionChain1.type = gt_req_pb2.ActionChain.Goto + actionChain1.next = 10000 + + #notification + actionChain2 = gt_req_pb2.ActionChain() + actionChain2.actionId = 10000 + actionChain2.type = gt_req_pb2.ActionChain.notification + actionChain2.title = self.notyTitle + actionChain2.text = self.notyContent + actionChain2.logo = self.notyIcon + actionChain2.logoURL = self.logoUrl + actionChain2.ring = self.isRing + actionChain2.clearable = self.isClearable + actionChain2.buzz = self.isVibrate + actionChain2.next = 10010 + + actionChain3 = gt_req_pb2.ActionChain() + actionChain3.actionId = 10010 + actionChain3.type = gt_req_pb2.ActionChain.Goto + actionChain3.next = 10020 + + actionChain4 = gt_req_pb2.ActionChain() + button1 = actionChain4.buttons.add() + button1.text = self.popButton1 + button1.next = 10040 + button2 = actionChain4.buttons.add() + button2.text = self.popButton2 + button2.next = 100 + + actionChain4.actionId = 10020 + actionChain4.type = gt_req_pb2.ActionChain.popup + actionChain4.title = self.popTitle + actionChain4.text = self.popContent + actionChain4.img = self.popImage + actionChain4.next = 6 + + + appStartUp = gt_req_pb2.AppStartUp() + appStartUp.android = "" + appStartUp.symbia = "" + appStartUp.ios = "" + actionChain5 = gt_req_pb2.ActionChain() + actionChain5.actionId = 10040 + actionChain5.type = gt_req_pb2.ActionChain.appdownload + actionChain5.name = self.loadTitle + actionChain5.url = self.loadUrl + actionChain5.logo = self.loadIcon + actionChain5.autoInstall = self.isAutoInstall + actionChain5.autostart = self.isActive + actionChain5.appstartupid.MergeFrom(appStartUp) + actionChain5.next = 6 + + #end + actionChain6 = gt_req_pb2.ActionChain() + actionChain6.actionId = 100 + actionChain6.type = gt_req_pb2.ActionChain.eoa + + actionChains = [actionChain1, actionChain2, actionChain3, actionChain4, actionChain5, actionChain6] + return actionChains diff --git a/code/push/igetui/template/igt_transmission_template.py b/code/push/igetui/template/igt_transmission_template.py new file mode 100644 index 0000000..d67a97c --- /dev/null +++ b/code/push/igetui/template/igt_transmission_template.py @@ -0,0 +1,46 @@ +__author__ = 'wei' + +from push.protobuf import * +import igt_base_template + + +class TransmissionTemplate(igt_base_template.BaseTemplate): + def __init__(self): + igt_base_template.BaseTemplate.__init__(self) + self.transmissionType = 0 + self.transmissionContent = "" + self.pushType = "TransmissionMsg" + + def getActionChains(self): + + + #set actionChain + actionChain1 = gt_req_pb2.ActionChain() + actionChain1.actionId = 1; + actionChain1.type = gt_req_pb2.ActionChain.Goto + actionChain1.next = 10030 + + #appStartUp + appStartUp = gt_req_pb2.AppStartUp() + appStartUp.android = "" + appStartUp.symbia = "" + appStartUp.ios = "" + + #start up app + actionChain2 = gt_req_pb2.ActionChain() + actionChain2.actionId = 10030 + actionChain2.type = gt_req_pb2.ActionChain.startapp + actionChain2.appid = ""; + actionChain2.autostart = (True if self.transmissionType == 1 else False) + actionChain2.appstartupid.CopyFrom(appStartUp) + actionChain2.failedAction = 100 + actionChain2.next = 100 + + #end + actionChain3 = gt_req_pb2.ActionChain() + actionChain3.actionId = 100 + actionChain3.type = gt_req_pb2.ActionChain.eoa + + actionChains = [actionChain1, actionChain2, actionChain3] + return actionChains + diff --git a/code/push/igt_push.py b/code/push/igt_push.py new file mode 100644 index 0000000..92f053b --- /dev/null +++ b/code/push/igt_push.py @@ -0,0 +1,163 @@ +# -*- coding: utf-8 -*- +__author__ = 'wei' + +import hashlib +import time +import urllib, urllib2, json +import base64 +import os + + +class IGeTui: + def __init__(self, host, appKey, masterSecret): + self.host = host + self.appKey = appKey + self.masterSecret = masterSecret + + def connect(self): + timenow = self.getCurrentTime() + sign = self.getSign(self.appKey, timenow, self.masterSecret) + params = {} + params['action'] = 'connect' + params['appkey'] = self.appKey + params['timeStamp'] = timenow + params['sign'] = sign + + rep = self.httpPost(params) + + if 'success' == (rep['result']): + return True + + print rep + raise Exception(str(rep) + "appKey or masterSecret is auth failed.") + return False + + def pushMessageToSingle(self, message, target): + params = {} + params['action'] = "pushMessageToSingleAction" + params['appkey'] = self.appKey + transparent = message.data.getTransparent() + params['clientData'] = base64.encodestring(transparent.SerializeToString()) + params['transmissionContent'] = message.data.transmissionContent + params['isOffline'] = message.isOffline + params['offlineExpireTime'] = message.offlineExpireTime + params['appId'] = target.appId + params['clientId'] = target.clientId + params['type'] = 2 #default is message + params['pushType'] = message.data.pushType + return self.httpPostJson(params) + + def pushMessageToApp(self, message): + params = {} + params['action'] = "pushMessageToAppAction" + params['appkey'] = self.appKey + + transparent = message.data.getTransparent() + params['clientData'] = base64.encodestring(transparent.SerializeToString()) + params['transmissionContent'] = message.data.transmissionContent + params['isOffline'] = message.isOffline + params['offlineExpireTime'] = message.offlineExpireTime + params['appIdList'] = message.appIdList + params['phoneTypeList'] = message.phoneTypeList + params['provinceList'] = message.provinceList + params['type'] = 2 # default is message + params['pushType'] = message.data.pushType + params['tagList'] = message.tagList + + return self.httpPostJson(params) + + def pushMessageToList(self, contentId, targets): + params = {} + params['action'] = 'pushMessageToListAction' + params['appkey'] = self.appKey + params['contentId'] = contentId + needDetails = os.getenv("needDetails","false") + params['needDetails'] = needDetails + targetList = [] + for target in targets: + appId = target.appId + clientId = target.clientId + target = {"appId": appId, "clientId": clientId} + targetList.append(target) + + params['targetList'] = targetList + params['type'] = 2 + return self.httpPostJson(params) + + def stop(self, contentId): + params = {} + params['action'] = 'stopTaskAction' + params['appkey'] = self.appKey + params['contentId'] = contentId + + ret = self.httpPostJson(params) + if ret["result"]=='ok': + return True + return False + + def getClientIdStatus(self, appId, clientId): + params = {} + params['action'] = 'getClientIdStatusAction' + params['appkey'] = self.appKey + params['appId'] = appId + params['clientId'] = clientId + + return self.httpPostJson(params) + + def getContentId(self, message): + params = {} + params['action'] = "getContentIdAction" + params['appkey'] = self.appKey + transparent = message.data.getTransparent() + params['clientData'] = base64.encodestring(transparent.SerializeToString()) + params['transmissionContent'] = message.data.transmissionContent + params["isOffline"] = message.isOffline + params["offlineExpireTime"] = message.offlineExpireTime + params["pushType"] = message.data.pushType + ret = self.httpPostJson(params) + + return ret['contentId'] if ret['result'] == 'ok' else ' ' + + def cancelContentId(self, contentId): + params = {} + params['action'] = 'cancleContentIdAction' + params['contentId'] = contentId + ret = self.httpPostJson() + return True if ret['result'] == 'ok' else False + + def getCurrentTime(self): + return (int)(time.time() * 1000) + + def getSign(self, appKey, timeStamp, masterSecret): + rawValue = appKey + str(timeStamp) + masterSecret + return hashlib.md5(rawValue.encode()).hexdigest() + + def httpPostJson(self, params): + params['version'] = '3.0.0.0' + ret = self.httpPost(params) + if ret is not None and "sign_error" == ret["result"]: + self.connect() + ret = self.httpPost(params) + return ret + + def httpPost(self, params): + #如果通过代理访问我们接口,需要自行配置代理,示例如下: + #opener = urllib2.build_opener(urllib2.ProxyHandler({'http':'192.168.1.108:808'}), urllib2.HTTPHandler(debuglevel=1)) + #urllib2.install_opener(opener) + data_json = json.dumps(params) + req = urllib2.Request(self.host, data_json) + retry_time_limit = 3 + isFail = True + tryTime = 0 + while isFail and tryTime < retry_time_limit: + try: + res_stream = urllib2.urlopen(req, timeout=60) + isFail = False + except: + isFail = True + tryTime += 1 + print("try " + str(tryTime) + " time failed, time out.") + + page_str = res_stream.read() + page_dict = eval(page_str) + return page_dict diff --git a/code/push/protobuf/__init__.py b/code/push/protobuf/__init__.py new file mode 100644 index 0000000..c8c481d --- /dev/null +++ b/code/push/protobuf/__init__.py @@ -0,0 +1,2 @@ +__author__ = 'wei' +__all__=["gt_req_pb2" ] \ No newline at end of file diff --git a/code/push/protobuf/gt_req_pb2.py b/code/push/protobuf/gt_req_pb2.py new file mode 100644 index 0000000..4549212 --- /dev/null +++ b/code/push/protobuf/gt_req_pb2.py @@ -0,0 +1,1925 @@ +# Generated by the protocol buffer compiler. DO NOT EDIT! + +from push.google.protobuf import descriptor +from push.google.protobuf import message +from push.google.protobuf import reflection +from push.google.protobuf import descriptor_pb2 +# @@protoc_insertion_point(imports) + + + +DESCRIPTOR = descriptor.FileDescriptor( + name='gt_req.proto', + package='', + serialized_pb='\n\x0cgt_req.proto\"H\n\x06GtAuth\x12\x0c\n\x04sign\x18\x01 \x02(\t\x12\x0e\n\x06\x61ppkey\x18\x02 \x02(\t\x12\x11\n\ttimestamp\x18\x03 \x02(\x03\x12\r\n\x05seqId\x18\x04 \x01(\t\"\xdc\x01\n\x0cGtAuthResult\x12\x0c\n\x04\x63ode\x18\x01 \x02(\x05\x12\x17\n\x0fredirectAddress\x18\x02 \x01(\t\x12\r\n\x05seqId\x18\x03 \x01(\t\x12\x0c\n\x04info\x18\x04 \x01(\t\"\x87\x01\n\x10GtAuthResultCode\x12\r\n\tsuccessed\x10\x00\x12\x11\n\rfailed_noSign\x10\x01\x12\x13\n\x0f\x66\x61iled_noAppkey\x10\x02\x12\x16\n\x12\x66\x61iled_noTimestamp\x10\x03\x12\x16\n\x12\x66\x61iled_AuthIllegal\x10\x04\x12\x0c\n\x08redirect\x10\x05\"/\n\x0bReqServList\x12\r\n\x05seqId\x18\x01 \x01(\t\x12\x11\n\ttimestamp\x18\x03 \x02(\x03\"|\n\x11ReqServListResult\x12\x0c\n\x04\x63ode\x18\x01 \x02(\x05\x12\x0c\n\x04host\x18\x02 \x03(\t\x12\r\n\x05seqId\x18\x03 \x01(\t\"<\n\x15ReqServHostResultCode\x12\r\n\tsuccessed\x10\x00\x12\n\n\x06\x66\x61iled\x10\x01\x12\x08\n\x04\x62usy\x10\x02\".\n\x0ePushListResult\x12\x1c\n\x07results\x18\x01 \x03(\x0b\x32\x0b.PushResult\"\xad\x02\n\nPushResult\x12\'\n\x06result\x18\x01 \x02(\x0e\x32\x17.PushResult.EPushResult\x12\x0e\n\x06taskId\x18\x02 \x02(\t\x12\x11\n\tmessageId\x18\x03 \x02(\t\x12\r\n\x05seqId\x18\x04 \x02(\t\x12\x0e\n\x06target\x18\x05 \x02(\t\x12\x0c\n\x04info\x18\x06 \x01(\t\x12\x0f\n\x07traceId\x18\x07 \x01(\t\"\x94\x01\n\x0b\x45PushResult\x12\x14\n\x10successed_online\x10\x00\x12\x15\n\x11successed_offline\x10\x01\x12\x14\n\x10successed_ignore\x10\x02\x12\n\n\x06\x66\x61iled\x10\x03\x12\x08\n\x04\x62usy\x10\x04\x12\x16\n\x12success_startBatch\x10\x05\x12\x14\n\x10success_endBatch\x10\x06\"Z\n\x13PushOSSingleMessage\x12\r\n\x05seqId\x18\x01 \x02(\t\x12\x1b\n\x07message\x18\x02 \x02(\x0b\x32\n.OSMessage\x12\x17\n\x06target\x18\x03 \x02(\x0b\x32\x07.Target\"\\\n\x14PushMMPSingleMessage\x12\r\n\x05seqId\x18\x01 \x02(\t\x12\x1c\n\x07message\x18\x02 \x02(\x0b\x32\x0b.MMPMessage\x12\x17\n\x06target\x18\x03 \x02(\x0b\x32\x07.Target\"T\n\x11StartMMPBatchTask\x12\x1c\n\x07message\x18\x01 \x02(\x0b\x32\x0b.MMPMessage\x12\x12\n\x06\x65xpire\x18\x02 \x02(\x03:\x02\x37\x32\x12\r\n\x05seqId\x18\x03 \x01(\t\"C\n\x10StartOSBatchTask\x12\x1b\n\x07message\x18\x01 \x02(\x0b\x32\n.OSMessage\x12\x12\n\x06\x65xpire\x18\x02 \x02(\x03:\x02\x37\x32\"J\n\x0fPushListMessage\x12\r\n\x05seqId\x18\x01 \x02(\t\x12\x0e\n\x06taskId\x18\x02 \x02(\t\x12\x18\n\x07targets\x18\x03 \x03(\x0b\x32\x07.Target\"-\n\x0c\x45ndBatchTask\x12\x0e\n\x06taskId\x18\x01 \x02(\t\x12\r\n\x05seqId\x18\x02 \x01(\t\"\x80\x01\n\x11PushMMPAppMessage\x12\x1c\n\x07message\x18\x01 \x02(\x0b\x32\x0b.MMPMessage\x12\x11\n\tappIdList\x18\x02 \x03(\t\x12\x15\n\rphoneTypeList\x18\x03 \x03(\t\x12\x14\n\x0cprovinceList\x18\x04 \x03(\t\x12\r\n\x05seqId\x18\x05 \x01(\t\"\xa6\x01\n\x0cServerNotify\x12&\n\x04type\x18\x01 \x02(\x0e\x32\x18.ServerNotify.NotifyType\x12\x0c\n\x04info\x18\x02 \x01(\t\x12\x11\n\textradata\x18\x03 \x01(\x0c\x12\r\n\x05seqId\x18\x04 \x01(\t\">\n\nNotifyType\x12\n\n\x06normal\x10\x00\x12\x15\n\x11serverListChanged\x10\x01\x12\r\n\texception\x10\x02\"1\n\x12ServerNotifyResult\x12\r\n\x05seqId\x18\x01 \x02(\t\x12\x0c\n\x04info\x18\x02 \x01(\t\"\xab\x01\n\tOSMessage\x12\x11\n\tisOffline\x18\x02 \x02(\x08\x12\x1c\n\x11offlineExpireTime\x18\x03 \x02(\x03:\x01\x31\x12!\n\x0btransparent\x18\x04 \x01(\x0b\x32\x0c.Transparent\x12\x11\n\textraData\x18\x05 \x01(\t\x12\x0f\n\x07msgType\x18\x06 \x01(\x05\x12\x14\n\x0cmsgTraceFlag\x18\x07 \x01(\x05\x12\x10\n\x08priority\x18\x08 \x01(\x05\"\xae\x01\n\nMMPMessage\x12!\n\x0btransparent\x18\x02 \x01(\x0b\x32\x0c.Transparent\x12\x11\n\textraData\x18\x03 \x01(\t\x12\x0f\n\x07msgType\x18\x04 \x01(\x05\x12\x14\n\x0cmsgTraceFlag\x18\x05 \x01(\x05\x12\x18\n\x10msgOfflineExpire\x18\x06 \x01(\x03\x12\x17\n\tisOffline\x18\x07 \x01(\x08:\x04true\x12\x10\n\x08priority\x18\x08 \x01(\x05\"\xab\x01\n\x0bTransparent\x12\n\n\x02id\x18\x01 \x02(\t\x12\x0e\n\x06\x61\x63tion\x18\x02 \x02(\t\x12\x0e\n\x06taskId\x18\x03 \x02(\t\x12\x0e\n\x06\x61ppKey\x18\x04 \x02(\t\x12\r\n\x05\x61ppId\x18\x05 \x02(\t\x12\x11\n\tmessageId\x18\x06 \x02(\t\x12\x1b\n\x08pushInfo\x18\x07 \x01(\x0b\x32\t.PushInfo\x12!\n\x0b\x61\x63tionChain\x18\x08 \x03(\x0b\x32\x0c.ActionChain\"\xa9\x01\n\x08PushInfo\x12\x0f\n\x07message\x18\x01 \x01(\t\x12\x11\n\tactionKey\x18\x02 \x01(\t\x12\r\n\x05sound\x18\x03 \x01(\t\x12\r\n\x05\x62\x61\x64ge\x18\x04 \x01(\t\x12\x0f\n\x07payload\x18\x05 \x01(\t\x12\x0e\n\x06locKey\x18\x06 \x01(\t\x12\x0f\n\x07locArgs\x18\x07 \x01(\t\x12\x14\n\x0c\x61\x63tionLocKey\x18\x08 \x01(\t\x12\x13\n\x0blaunchImage\x18\t \x01(\t\"\x84\t\n\x0b\x41\x63tionChain\x12\x10\n\x08\x61\x63tionId\x18\x01 \x02(\x05\x12\x1f\n\x04type\x18\x02 \x02(\x0e\x32\x11.ActionChain.Type\x12\x0c\n\x04next\x18\x03 \x01(\x05\x12\x0c\n\x04logo\x18\x64 \x01(\t\x12\x0f\n\x07logoURL\x18\x65 \x01(\t\x12\r\n\x05title\x18\x66 \x01(\t\x12\x0c\n\x04text\x18g \x01(\t\x12\x11\n\tclearable\x18h \x01(\x08\x12\x0c\n\x04ring\x18i \x01(\x08\x12\x0c\n\x04\x62uzz\x18j \x01(\x08\x12\x11\n\tbannerURL\x18k \x01(\t\x12\x0b\n\x03img\x18x \x01(\t\x12\x18\n\x07\x62uttons\x18y \x03(\x0b\x32\x07.Button\x12\x0e\n\x05\x61ppid\x18\x8c\x01 \x01(\t\x12\"\n\x0c\x61ppstartupid\x18\x8d\x01 \x01(\x0b\x32\x0b.AppStartUp\x12\x12\n\tautostart\x18\x8e\x01 \x01(\x08\x12\x15\n\x0c\x66\x61iledAction\x18\x8f\x01 \x01(\x05\x12\x0c\n\x03url\x18\xa0\x01 \x01(\t\x12\x10\n\x07withcid\x18\xa1\x01 \x01(\t\x12\x1e\n\x0eis_withnettype\x18\xa2\x01 \x01(\x08:\x05\x66\x61lse\x12\x10\n\x07\x61\x64\x64ress\x18\xb4\x01 \x01(\t\x12\x10\n\x07\x63ontent\x18\xb5\x01 \x01(\t\x12\x0b\n\x02\x63t\x18\xb6\x01 \x01(\x03\x12\x19\n\x04\x66lag\x18\xb7\x01 \x01(\x0e\x32\n.SMSStatus\x12\x18\n\x0fsuccessedAction\x18\xc8\x01 \x01(\x05\x12\x1a\n\x11uninstalledAction\x18\xc9\x01 \x01(\x05\x12\r\n\x04name\x18\xdc\x01 \x01(\t\x12\x14\n\x0b\x61utoInstall\x18\xdf\x01 \x01(\x08\x12\x19\n\x10wifiAutodownload\x18\xe1\x01 \x01(\x08\x12\x16\n\rforceDownload\x18\xe2\x01 \x01(\x08\x12\x15\n\x0cshowProgress\x18\xe3\x01 \x01(\x08\x12\r\n\x04post\x18\xf1\x01 \x01(\t\x12\x10\n\x07headers\x18\xf2\x01 \x01(\t\x12\x12\n\tgroupable\x18\x84\x02 \x01(\x08\x12\x11\n\x08mmsTitle\x18\x98\x02 \x01(\t\x12\x0f\n\x06mmsURL\x18\x99\x02 \x01(\t\x12\x10\n\x07preload\x18\xac\x02 \x01(\x08\x12\x0f\n\x06taskid\x18\xc0\x02 \x01(\t\x12\x11\n\x08\x64uration\x18\xd4\x02 \x01(\x03\x12\r\n\x04\x64\x61te\x18\xe8\x02 \x01(\t\"\xe0\x02\n\x04Type\x12\x08\n\x04Goto\x10\x00\x12\x10\n\x0cnotification\x10\x01\x12\t\n\x05popup\x10\x02\x12\x0c\n\x08startapp\x10\x03\x12\x0c\n\x08startweb\x10\x04\x12\x0c\n\x08smsinbox\x10\x05\x12\x0c\n\x08\x63heckapp\x10\x06\x12\x07\n\x03\x65oa\x10\x07\x12\x0f\n\x0b\x61ppdownload\x10\x08\x12\x0c\n\x08startsms\x10\t\x12\r\n\thttpproxy\x10\n\x12\r\n\tsmsinbox2\x10\x0b\x12\r\n\tmmsinbox2\x10\x0c\x12\x0c\n\x08popupweb\x10\r\x12\x08\n\x04\x64ial\x10\x0e\x12\x11\n\rreportbindapp\x10\x0f\x12\x16\n\x12reportaddphoneinfo\x10\x10\x12\x11\n\rreportapplist\x10\x11\x12\x11\n\rterminatetask\x10\x12\x12\r\n\treportapp\x10\x13\x12\r\n\tenablelog\x10\x14\x12\x0e\n\ndisablelog\x10\x15\x12\r\n\tuploadlog\x10\x16\":\n\nAppStartUp\x12\x0f\n\x07\x61ndroid\x18\x01 \x01(\t\x12\x0e\n\x06symbia\x18\x02 \x01(\t\x12\x0b\n\x03ios\x18\x03 \x01(\t\"$\n\x06\x42utton\x12\x0c\n\x04text\x18\x01 \x01(\t\x12\x0c\n\x04next\x18\x02 \x01(\x05\")\n\x06Target\x12\r\n\x05\x61ppId\x18\x01 \x02(\t\x12\x10\n\x08\x63lientId\x18\x02 \x02(\t*\xc9\x02\n\x05\x43mdID\x12\r\n\tGTHEARDBT\x10\x00\x12\n\n\x06GTAUTH\x10\x01\x12\x11\n\rGTAUTH_RESULT\x10\x02\x12\x0f\n\x0bREQSERVHOST\x10\x03\x12\x15\n\x11REQSERVHOSTRESULT\x10\x04\x12\x0e\n\nPUSHRESULT\x10\x05\x12\x17\n\x13PUSHOSSINGLEMESSAGE\x10\x06\x12\x18\n\x14PUSHMMPSINGLEMESSAGE\x10\x07\x12\x15\n\x11STARTMMPBATCHTASK\x10\x08\x12\x14\n\x10STARTOSBATCHTASK\x10\t\x12\x13\n\x0fPUSHLISTMESSAGE\x10\n\x12\x10\n\x0c\x45NDBATCHTASK\x10\x0b\x12\x15\n\x11PUSHMMPAPPMESSAGE\x10\x0c\x12\x10\n\x0cSERVERNOTIFY\x10\r\x12\x12\n\x0ePUSHLISTRESULT\x10\x0e\x12\x16\n\x12SERVERNOTIFYRESULT\x10\x0f*!\n\tSMSStatus\x12\n\n\x06unread\x10\x00\x12\x08\n\x04read\x10\x01\x42\x02H\x01') + +_CMDID = descriptor.EnumDescriptor( + name='CmdID', + full_name='CmdID', + filename=None, + file=DESCRIPTOR, + values=[ + descriptor.EnumValueDescriptor( + name='GTHEARDBT', index=0, number=0, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='GTAUTH', index=1, number=1, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='GTAUTH_RESULT', index=2, number=2, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='REQSERVHOST', index=3, number=3, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='REQSERVHOSTRESULT', index=4, number=4, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='PUSHRESULT', index=5, number=5, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='PUSHOSSINGLEMESSAGE', index=6, number=6, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='PUSHMMPSINGLEMESSAGE', index=7, number=7, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='STARTMMPBATCHTASK', index=8, number=8, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='STARTOSBATCHTASK', index=9, number=9, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='PUSHLISTMESSAGE', index=10, number=10, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='ENDBATCHTASK', index=11, number=11, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='PUSHMMPAPPMESSAGE', index=12, number=12, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='SERVERNOTIFY', index=13, number=13, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='PUSHLISTRESULT', index=14, number=14, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='SERVERNOTIFYRESULT', index=15, number=15, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=3653, + serialized_end=3982, +) + + +_SMSSTATUS = descriptor.EnumDescriptor( + name='SMSStatus', + full_name='SMSStatus', + filename=None, + file=DESCRIPTOR, + values=[ + descriptor.EnumValueDescriptor( + name='unread', index=0, number=0, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='read', index=1, number=1, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=3984, + serialized_end=4017, +) + + +GTHEARDBT = 0 +GTAUTH = 1 +GTAUTH_RESULT = 2 +REQSERVHOST = 3 +REQSERVHOSTRESULT = 4 +PUSHRESULT = 5 +PUSHOSSINGLEMESSAGE = 6 +PUSHMMPSINGLEMESSAGE = 7 +STARTMMPBATCHTASK = 8 +STARTOSBATCHTASK = 9 +PUSHLISTMESSAGE = 10 +ENDBATCHTASK = 11 +PUSHMMPAPPMESSAGE = 12 +SERVERNOTIFY = 13 +PUSHLISTRESULT = 14 +SERVERNOTIFYRESULT = 15 +unread = 0 +read = 1 + + +_GTAUTHRESULT_GTAUTHRESULTCODE = descriptor.EnumDescriptor( + name='GtAuthResultCode', + full_name='GtAuthResult.GtAuthResultCode', + filename=None, + file=DESCRIPTOR, + values=[ + descriptor.EnumValueDescriptor( + name='successed', index=0, number=0, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='failed_noSign', index=1, number=1, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='failed_noAppkey', index=2, number=2, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='failed_noTimestamp', index=3, number=3, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='failed_AuthIllegal', index=4, number=4, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='redirect', index=5, number=5, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=176, + serialized_end=311, +) + +_REQSERVLISTRESULT_REQSERVHOSTRESULTCODE = descriptor.EnumDescriptor( + name='ReqServHostResultCode', + full_name='ReqServListResult.ReqServHostResultCode', + filename=None, + file=DESCRIPTOR, + values=[ + descriptor.EnumValueDescriptor( + name='successed', index=0, number=0, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='failed', index=1, number=1, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='busy', index=2, number=2, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=426, + serialized_end=486, +) + +_PUSHRESULT_EPUSHRESULT = descriptor.EnumDescriptor( + name='EPushResult', + full_name='PushResult.EPushResult', + filename=None, + file=DESCRIPTOR, + values=[ + descriptor.EnumValueDescriptor( + name='successed_online', index=0, number=0, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='successed_offline', index=1, number=1, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='successed_ignore', index=2, number=2, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='failed', index=3, number=3, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='busy', index=4, number=4, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='success_startBatch', index=5, number=5, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='success_endBatch', index=6, number=6, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=690, + serialized_end=838, +) + +_SERVERNOTIFY_NOTIFYTYPE = descriptor.EnumDescriptor( + name='NotifyType', + full_name='ServerNotify.NotifyType', + filename=None, + file=DESCRIPTOR, + values=[ + descriptor.EnumValueDescriptor( + name='normal', index=0, number=0, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='serverListChanged', index=1, number=1, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='exception', index=2, number=2, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=1540, + serialized_end=1602, +) + +_ACTIONCHAIN_TYPE = descriptor.EnumDescriptor( + name='Type', + full_name='ActionChain.Type', + filename=None, + file=DESCRIPTOR, + values=[ + descriptor.EnumValueDescriptor( + name='Goto', index=0, number=0, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='notification', index=1, number=1, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='popup', index=2, number=2, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='startapp', index=3, number=3, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='startweb', index=4, number=4, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='smsinbox', index=5, number=5, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='checkapp', index=6, number=6, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='eoa', index=7, number=7, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='appdownload', index=8, number=8, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='startsms', index=9, number=9, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='httpproxy', index=10, number=10, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='smsinbox2', index=11, number=11, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='mmsinbox2', index=12, number=12, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='popupweb', index=13, number=13, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='dial', index=14, number=14, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='reportbindapp', index=15, number=15, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='reportaddphoneinfo', index=16, number=16, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='reportapplist', index=17, number=17, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='terminatetask', index=18, number=18, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='reportapp', index=19, number=19, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='enablelog', index=20, number=20, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='disablelog', index=21, number=21, + options=None, + type=None), + descriptor.EnumValueDescriptor( + name='uploadlog', index=22, number=22, + options=None, + type=None), + ], + containing_type=None, + options=None, + serialized_start=3157, + serialized_end=3509, +) + + +_GTAUTH = descriptor.Descriptor( + name='GtAuth', + full_name='GtAuth', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='sign', full_name='GtAuth.sign', index=0, + number=1, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='appkey', full_name='GtAuth.appkey', index=1, + number=2, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='timestamp', full_name='GtAuth.timestamp', index=2, + number=3, type=3, cpp_type=2, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='seqId', full_name='GtAuth.seqId', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=16, + serialized_end=88, +) + + +_GTAUTHRESULT = descriptor.Descriptor( + name='GtAuthResult', + full_name='GtAuthResult', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='code', full_name='GtAuthResult.code', index=0, + number=1, type=5, cpp_type=1, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='redirectAddress', full_name='GtAuthResult.redirectAddress', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='seqId', full_name='GtAuthResult.seqId', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='info', full_name='GtAuthResult.info', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _GTAUTHRESULT_GTAUTHRESULTCODE, + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=91, + serialized_end=311, +) + + +_REQSERVLIST = descriptor.Descriptor( + name='ReqServList', + full_name='ReqServList', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='seqId', full_name='ReqServList.seqId', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='timestamp', full_name='ReqServList.timestamp', index=1, + number=3, type=3, cpp_type=2, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=313, + serialized_end=360, +) + + +_REQSERVLISTRESULT = descriptor.Descriptor( + name='ReqServListResult', + full_name='ReqServListResult', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='code', full_name='ReqServListResult.code', index=0, + number=1, type=5, cpp_type=1, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='host', full_name='ReqServListResult.host', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='seqId', full_name='ReqServListResult.seqId', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _REQSERVLISTRESULT_REQSERVHOSTRESULTCODE, + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=362, + serialized_end=486, +) + + +_PUSHLISTRESULT = descriptor.Descriptor( + name='PushListResult', + full_name='PushListResult', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='results', full_name='PushListResult.results', index=0, + number=1, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=488, + serialized_end=534, +) + + +_PUSHRESULT = descriptor.Descriptor( + name='PushResult', + full_name='PushResult', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='result', full_name='PushResult.result', index=0, + number=1, type=14, cpp_type=8, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='taskId', full_name='PushResult.taskId', index=1, + number=2, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='messageId', full_name='PushResult.messageId', index=2, + number=3, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='seqId', full_name='PushResult.seqId', index=3, + number=4, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='target', full_name='PushResult.target', index=4, + number=5, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='info', full_name='PushResult.info', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='traceId', full_name='PushResult.traceId', index=6, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _PUSHRESULT_EPUSHRESULT, + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=537, + serialized_end=838, +) + + +_PUSHOSSINGLEMESSAGE = descriptor.Descriptor( + name='PushOSSingleMessage', + full_name='PushOSSingleMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='seqId', full_name='PushOSSingleMessage.seqId', index=0, + number=1, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='message', full_name='PushOSSingleMessage.message', index=1, + number=2, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='target', full_name='PushOSSingleMessage.target', index=2, + number=3, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=840, + serialized_end=930, +) + + +_PUSHMMPSINGLEMESSAGE = descriptor.Descriptor( + name='PushMMPSingleMessage', + full_name='PushMMPSingleMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='seqId', full_name='PushMMPSingleMessage.seqId', index=0, + number=1, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='message', full_name='PushMMPSingleMessage.message', index=1, + number=2, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='target', full_name='PushMMPSingleMessage.target', index=2, + number=3, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=932, + serialized_end=1024, +) + + +_STARTMMPBATCHTASK = descriptor.Descriptor( + name='StartMMPBatchTask', + full_name='StartMMPBatchTask', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='message', full_name='StartMMPBatchTask.message', index=0, + number=1, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='expire', full_name='StartMMPBatchTask.expire', index=1, + number=2, type=3, cpp_type=2, label=2, + has_default_value=True, default_value=72, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='seqId', full_name='StartMMPBatchTask.seqId', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1026, + serialized_end=1110, +) + + +_STARTOSBATCHTASK = descriptor.Descriptor( + name='StartOSBatchTask', + full_name='StartOSBatchTask', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='message', full_name='StartOSBatchTask.message', index=0, + number=1, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='expire', full_name='StartOSBatchTask.expire', index=1, + number=2, type=3, cpp_type=2, label=2, + has_default_value=True, default_value=72, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1112, + serialized_end=1179, +) + + +_PUSHLISTMESSAGE = descriptor.Descriptor( + name='PushListMessage', + full_name='PushListMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='seqId', full_name='PushListMessage.seqId', index=0, + number=1, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='taskId', full_name='PushListMessage.taskId', index=1, + number=2, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='targets', full_name='PushListMessage.targets', index=2, + number=3, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1181, + serialized_end=1255, +) + + +_ENDBATCHTASK = descriptor.Descriptor( + name='EndBatchTask', + full_name='EndBatchTask', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='taskId', full_name='EndBatchTask.taskId', index=0, + number=1, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='seqId', full_name='EndBatchTask.seqId', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1257, + serialized_end=1302, +) + + +_PUSHMMPAPPMESSAGE = descriptor.Descriptor( + name='PushMMPAppMessage', + full_name='PushMMPAppMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='message', full_name='PushMMPAppMessage.message', index=0, + number=1, type=11, cpp_type=10, label=2, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='appIdList', full_name='PushMMPAppMessage.appIdList', index=1, + number=2, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='phoneTypeList', full_name='PushMMPAppMessage.phoneTypeList', index=2, + number=3, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='provinceList', full_name='PushMMPAppMessage.provinceList', index=3, + number=4, type=9, cpp_type=9, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='seqId', full_name='PushMMPAppMessage.seqId', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1305, + serialized_end=1433, +) + + +_SERVERNOTIFY = descriptor.Descriptor( + name='ServerNotify', + full_name='ServerNotify', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='type', full_name='ServerNotify.type', index=0, + number=1, type=14, cpp_type=8, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='info', full_name='ServerNotify.info', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='extradata', full_name='ServerNotify.extradata', index=2, + number=3, type=12, cpp_type=9, label=1, + has_default_value=False, default_value="", + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='seqId', full_name='ServerNotify.seqId', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _SERVERNOTIFY_NOTIFYTYPE, + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1436, + serialized_end=1602, +) + + +_SERVERNOTIFYRESULT = descriptor.Descriptor( + name='ServerNotifyResult', + full_name='ServerNotifyResult', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='seqId', full_name='ServerNotifyResult.seqId', index=0, + number=1, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='info', full_name='ServerNotifyResult.info', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1604, + serialized_end=1653, +) + + +_OSMESSAGE = descriptor.Descriptor( + name='OSMessage', + full_name='OSMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='isOffline', full_name='OSMessage.isOffline', index=0, + number=2, type=8, cpp_type=7, label=2, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='offlineExpireTime', full_name='OSMessage.offlineExpireTime', index=1, + number=3, type=3, cpp_type=2, label=2, + has_default_value=True, default_value=1, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='transparent', full_name='OSMessage.transparent', index=2, + number=4, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='extraData', full_name='OSMessage.extraData', index=3, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='msgType', full_name='OSMessage.msgType', index=4, + number=6, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='msgTraceFlag', full_name='OSMessage.msgTraceFlag', index=5, + number=7, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='priority', full_name='OSMessage.priority', index=6, + number=8, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1656, + serialized_end=1827, +) + + +_MMPMESSAGE = descriptor.Descriptor( + name='MMPMessage', + full_name='MMPMessage', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='transparent', full_name='MMPMessage.transparent', index=0, + number=2, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='extraData', full_name='MMPMessage.extraData', index=1, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='msgType', full_name='MMPMessage.msgType', index=2, + number=4, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='msgTraceFlag', full_name='MMPMessage.msgTraceFlag', index=3, + number=5, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='msgOfflineExpire', full_name='MMPMessage.msgOfflineExpire', index=4, + number=6, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='isOffline', full_name='MMPMessage.isOffline', index=5, + number=7, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=True, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='priority', full_name='MMPMessage.priority', index=6, + number=8, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=1830, + serialized_end=2004, +) + + +_TRANSPARENT = descriptor.Descriptor( + name='Transparent', + full_name='Transparent', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='id', full_name='Transparent.id', index=0, + number=1, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='action', full_name='Transparent.action', index=1, + number=2, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='taskId', full_name='Transparent.taskId', index=2, + number=3, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='appKey', full_name='Transparent.appKey', index=3, + number=4, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='appId', full_name='Transparent.appId', index=4, + number=5, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='messageId', full_name='Transparent.messageId', index=5, + number=6, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='pushInfo', full_name='Transparent.pushInfo', index=6, + number=7, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='actionChain', full_name='Transparent.actionChain', index=7, + number=8, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=2007, + serialized_end=2178, +) + + +_PUSHINFO = descriptor.Descriptor( + name='PushInfo', + full_name='PushInfo', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='message', full_name='PushInfo.message', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='actionKey', full_name='PushInfo.actionKey', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='sound', full_name='PushInfo.sound', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='badge', full_name='PushInfo.badge', index=3, + number=4, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='payload', full_name='PushInfo.payload', index=4, + number=5, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='locKey', full_name='PushInfo.locKey', index=5, + number=6, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='locArgs', full_name='PushInfo.locArgs', index=6, + number=7, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='actionLocKey', full_name='PushInfo.actionLocKey', index=7, + number=8, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='launchImage', full_name='PushInfo.launchImage', index=8, + number=9, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=2181, + serialized_end=2350, +) + + +_ACTIONCHAIN = descriptor.Descriptor( + name='ActionChain', + full_name='ActionChain', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='actionId', full_name='ActionChain.actionId', index=0, + number=1, type=5, cpp_type=1, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='type', full_name='ActionChain.type', index=1, + number=2, type=14, cpp_type=8, label=2, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='next', full_name='ActionChain.next', index=2, + number=3, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='logo', full_name='ActionChain.logo', index=3, + number=100, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='logoURL', full_name='ActionChain.logoURL', index=4, + number=101, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='title', full_name='ActionChain.title', index=5, + number=102, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='text', full_name='ActionChain.text', index=6, + number=103, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='clearable', full_name='ActionChain.clearable', index=7, + number=104, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='ring', full_name='ActionChain.ring', index=8, + number=105, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='buzz', full_name='ActionChain.buzz', index=9, + number=106, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='bannerURL', full_name='ActionChain.bannerURL', index=10, + number=107, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='img', full_name='ActionChain.img', index=11, + number=120, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='buttons', full_name='ActionChain.buttons', index=12, + number=121, type=11, cpp_type=10, label=3, + has_default_value=False, default_value=[], + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='appid', full_name='ActionChain.appid', index=13, + number=140, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='appstartupid', full_name='ActionChain.appstartupid', index=14, + number=141, type=11, cpp_type=10, label=1, + has_default_value=False, default_value=None, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='autostart', full_name='ActionChain.autostart', index=15, + number=142, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='failedAction', full_name='ActionChain.failedAction', index=16, + number=143, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='url', full_name='ActionChain.url', index=17, + number=160, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='withcid', full_name='ActionChain.withcid', index=18, + number=161, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='is_withnettype', full_name='ActionChain.is_withnettype', index=19, + number=162, type=8, cpp_type=7, label=1, + has_default_value=True, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='address', full_name='ActionChain.address', index=20, + number=180, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='content', full_name='ActionChain.content', index=21, + number=181, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='ct', full_name='ActionChain.ct', index=22, + number=182, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='flag', full_name='ActionChain.flag', index=23, + number=183, type=14, cpp_type=8, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='successedAction', full_name='ActionChain.successedAction', index=24, + number=200, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='uninstalledAction', full_name='ActionChain.uninstalledAction', index=25, + number=201, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='name', full_name='ActionChain.name', index=26, + number=220, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='autoInstall', full_name='ActionChain.autoInstall', index=27, + number=223, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='wifiAutodownload', full_name='ActionChain.wifiAutodownload', index=28, + number=225, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='forceDownload', full_name='ActionChain.forceDownload', index=29, + number=226, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='showProgress', full_name='ActionChain.showProgress', index=30, + number=227, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='post', full_name='ActionChain.post', index=31, + number=241, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='headers', full_name='ActionChain.headers', index=32, + number=242, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='groupable', full_name='ActionChain.groupable', index=33, + number=260, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='mmsTitle', full_name='ActionChain.mmsTitle', index=34, + number=280, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='mmsURL', full_name='ActionChain.mmsURL', index=35, + number=281, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='preload', full_name='ActionChain.preload', index=36, + number=300, type=8, cpp_type=7, label=1, + has_default_value=False, default_value=False, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='taskid', full_name='ActionChain.taskid', index=37, + number=320, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='duration', full_name='ActionChain.duration', index=38, + number=340, type=3, cpp_type=2, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='date', full_name='ActionChain.date', index=39, + number=360, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + _ACTIONCHAIN_TYPE, + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=2353, + serialized_end=3509, +) + + +_APPSTARTUP = descriptor.Descriptor( + name='AppStartUp', + full_name='AppStartUp', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='android', full_name='AppStartUp.android', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='symbia', full_name='AppStartUp.symbia', index=1, + number=2, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='ios', full_name='AppStartUp.ios', index=2, + number=3, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=3511, + serialized_end=3569, +) + + +_BUTTON = descriptor.Descriptor( + name='Button', + full_name='Button', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='text', full_name='Button.text', index=0, + number=1, type=9, cpp_type=9, label=1, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='next', full_name='Button.next', index=1, + number=2, type=5, cpp_type=1, label=1, + has_default_value=False, default_value=0, + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=3571, + serialized_end=3607, +) + + +_TARGET = descriptor.Descriptor( + name='Target', + full_name='Target', + filename=None, + file=DESCRIPTOR, + containing_type=None, + fields=[ + descriptor.FieldDescriptor( + name='appId', full_name='Target.appId', index=0, + number=1, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + descriptor.FieldDescriptor( + name='clientId', full_name='Target.clientId', index=1, + number=2, type=9, cpp_type=9, label=2, + has_default_value=False, default_value=unicode("", "utf-8"), + message_type=None, enum_type=None, containing_type=None, + is_extension=False, extension_scope=None, + options=None), + ], + extensions=[ + ], + nested_types=[], + enum_types=[ + ], + options=None, + is_extendable=False, + extension_ranges=[], + serialized_start=3609, + serialized_end=3650, +) + +_GTAUTHRESULT_GTAUTHRESULTCODE.containing_type = _GTAUTHRESULT; +_REQSERVLISTRESULT_REQSERVHOSTRESULTCODE.containing_type = _REQSERVLISTRESULT; +_PUSHLISTRESULT.fields_by_name['results'].message_type = _PUSHRESULT +_PUSHRESULT.fields_by_name['result'].enum_type = _PUSHRESULT_EPUSHRESULT +_PUSHRESULT_EPUSHRESULT.containing_type = _PUSHRESULT; +_PUSHOSSINGLEMESSAGE.fields_by_name['message'].message_type = _OSMESSAGE +_PUSHOSSINGLEMESSAGE.fields_by_name['target'].message_type = _TARGET +_PUSHMMPSINGLEMESSAGE.fields_by_name['message'].message_type = _MMPMESSAGE +_PUSHMMPSINGLEMESSAGE.fields_by_name['target'].message_type = _TARGET +_STARTMMPBATCHTASK.fields_by_name['message'].message_type = _MMPMESSAGE +_STARTOSBATCHTASK.fields_by_name['message'].message_type = _OSMESSAGE +_PUSHLISTMESSAGE.fields_by_name['targets'].message_type = _TARGET +_PUSHMMPAPPMESSAGE.fields_by_name['message'].message_type = _MMPMESSAGE +_SERVERNOTIFY.fields_by_name['type'].enum_type = _SERVERNOTIFY_NOTIFYTYPE +_SERVERNOTIFY_NOTIFYTYPE.containing_type = _SERVERNOTIFY; +_OSMESSAGE.fields_by_name['transparent'].message_type = _TRANSPARENT +_MMPMESSAGE.fields_by_name['transparent'].message_type = _TRANSPARENT +_TRANSPARENT.fields_by_name['pushInfo'].message_type = _PUSHINFO +_TRANSPARENT.fields_by_name['actionChain'].message_type = _ACTIONCHAIN +_ACTIONCHAIN.fields_by_name['type'].enum_type = _ACTIONCHAIN_TYPE +_ACTIONCHAIN.fields_by_name['buttons'].message_type = _BUTTON +_ACTIONCHAIN.fields_by_name['appstartupid'].message_type = _APPSTARTUP +_ACTIONCHAIN.fields_by_name['flag'].enum_type = _SMSSTATUS +_ACTIONCHAIN_TYPE.containing_type = _ACTIONCHAIN; +DESCRIPTOR.message_types_by_name['GtAuth'] = _GTAUTH +DESCRIPTOR.message_types_by_name['GtAuthResult'] = _GTAUTHRESULT +DESCRIPTOR.message_types_by_name['ReqServList'] = _REQSERVLIST +DESCRIPTOR.message_types_by_name['ReqServListResult'] = _REQSERVLISTRESULT +DESCRIPTOR.message_types_by_name['PushListResult'] = _PUSHLISTRESULT +DESCRIPTOR.message_types_by_name['PushResult'] = _PUSHRESULT +DESCRIPTOR.message_types_by_name['PushOSSingleMessage'] = _PUSHOSSINGLEMESSAGE +DESCRIPTOR.message_types_by_name['PushMMPSingleMessage'] = _PUSHMMPSINGLEMESSAGE +DESCRIPTOR.message_types_by_name['StartMMPBatchTask'] = _STARTMMPBATCHTASK +DESCRIPTOR.message_types_by_name['StartOSBatchTask'] = _STARTOSBATCHTASK +DESCRIPTOR.message_types_by_name['PushListMessage'] = _PUSHLISTMESSAGE +DESCRIPTOR.message_types_by_name['EndBatchTask'] = _ENDBATCHTASK +DESCRIPTOR.message_types_by_name['PushMMPAppMessage'] = _PUSHMMPAPPMESSAGE +DESCRIPTOR.message_types_by_name['ServerNotify'] = _SERVERNOTIFY +DESCRIPTOR.message_types_by_name['ServerNotifyResult'] = _SERVERNOTIFYRESULT +DESCRIPTOR.message_types_by_name['OSMessage'] = _OSMESSAGE +DESCRIPTOR.message_types_by_name['MMPMessage'] = _MMPMESSAGE +DESCRIPTOR.message_types_by_name['Transparent'] = _TRANSPARENT +DESCRIPTOR.message_types_by_name['PushInfo'] = _PUSHINFO +DESCRIPTOR.message_types_by_name['ActionChain'] = _ACTIONCHAIN +DESCRIPTOR.message_types_by_name['AppStartUp'] = _APPSTARTUP +DESCRIPTOR.message_types_by_name['Button'] = _BUTTON +DESCRIPTOR.message_types_by_name['Target'] = _TARGET + +class GtAuth(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _GTAUTH + + # @@protoc_insertion_point(class_scope:GtAuth) + +class GtAuthResult(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _GTAUTHRESULT + + # @@protoc_insertion_point(class_scope:GtAuthResult) + +class ReqServList(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _REQSERVLIST + + # @@protoc_insertion_point(class_scope:ReqServList) + +class ReqServListResult(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _REQSERVLISTRESULT + + # @@protoc_insertion_point(class_scope:ReqServListResult) + +class PushListResult(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _PUSHLISTRESULT + + # @@protoc_insertion_point(class_scope:PushListResult) + +class PushResult(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _PUSHRESULT + + # @@protoc_insertion_point(class_scope:PushResult) + +class PushOSSingleMessage(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _PUSHOSSINGLEMESSAGE + + # @@protoc_insertion_point(class_scope:PushOSSingleMessage) + +class PushMMPSingleMessage(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _PUSHMMPSINGLEMESSAGE + + # @@protoc_insertion_point(class_scope:PushMMPSingleMessage) + +class StartMMPBatchTask(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _STARTMMPBATCHTASK + + # @@protoc_insertion_point(class_scope:StartMMPBatchTask) + +class StartOSBatchTask(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _STARTOSBATCHTASK + + # @@protoc_insertion_point(class_scope:StartOSBatchTask) + +class PushListMessage(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _PUSHLISTMESSAGE + + # @@protoc_insertion_point(class_scope:PushListMessage) + +class EndBatchTask(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _ENDBATCHTASK + + # @@protoc_insertion_point(class_scope:EndBatchTask) + +class PushMMPAppMessage(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _PUSHMMPAPPMESSAGE + + # @@protoc_insertion_point(class_scope:PushMMPAppMessage) + +class ServerNotify(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _SERVERNOTIFY + + # @@protoc_insertion_point(class_scope:ServerNotify) + +class ServerNotifyResult(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _SERVERNOTIFYRESULT + + # @@protoc_insertion_point(class_scope:ServerNotifyResult) + +class OSMessage(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _OSMESSAGE + + # @@protoc_insertion_point(class_scope:OSMessage) + +class MMPMessage(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _MMPMESSAGE + + # @@protoc_insertion_point(class_scope:MMPMessage) + +class Transparent(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TRANSPARENT + + # @@protoc_insertion_point(class_scope:Transparent) + +class PushInfo(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _PUSHINFO + + # @@protoc_insertion_point(class_scope:PushInfo) + +class ActionChain(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _ACTIONCHAIN + + # @@protoc_insertion_point(class_scope:ActionChain) + +class AppStartUp(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _APPSTARTUP + + # @@protoc_insertion_point(class_scope:AppStartUp) + +class Button(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _BUTTON + + # @@protoc_insertion_point(class_scope:Button) + +class Target(message.Message): + __metaclass__ = reflection.GeneratedProtocolMessageType + DESCRIPTOR = _TARGET + + # @@protoc_insertion_point(class_scope:Target) + +# @@protoc_insertion_point(module_scope) From 96de73b6d7ace5bbdb8467a2c204009f195f2911 Mon Sep 17 00:00:00 2001 From: Anton Zhong Date: Fri, 18 Jul 2014 09:57:54 +0800 Subject: [PATCH 45/66] Fix bug, chang return format of eventhandler --- code/dbapi.py | 10 +--------- code/handler/EventHandler.py | 11 +++++++++-- code/static/avatar/{28.png => 1.png} | Bin code/static/avatar/2.png | Bin 0 -> 143877 bytes code/static/avatar/3.png | Bin 0 -> 143877 bytes code/static/avatar/4.png | Bin 0 -> 143877 bytes code/static/avatar/5.png | Bin 0 -> 143877 bytes code/static/avatar/6.png | Bin 0 -> 143877 bytes 8 files changed, 10 insertions(+), 11 deletions(-) rename code/static/avatar/{28.png => 1.png} (100%) create mode 100644 code/static/avatar/2.png create mode 100644 code/static/avatar/3.png create mode 100644 code/static/avatar/4.png create mode 100644 code/static/avatar/5.png create mode 100644 code/static/avatar/6.png diff --git a/code/dbapi.py b/code/dbapi.py index a6a9f3e..8fc77b7 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -457,15 +457,7 @@ def getSupportsByEventId(self,eid): param=(eid,) cursor.execute(sql,param) result=cursor.fetchall() - if(result==tuple()): - return dict() - else: - i=0 - re=dict() - while(isj1kaks@5Iq=@k_aDAVnn@>3 zn#^=My{2uHijp)c(sv{X2nbYJ8A(+L2uSw-5dz$QD?a1;WB*N%ZmQDa5cTs!=l?M< zR$_``5D-lX$R8%K|M7^SlJ^5B>Rk>GbiuzW(B%x|UIe-e4(L23r=6^*rj$y<+kaf12#Zaw#`&R^!--`0}# zTfAiV#@z>QV-!GI8TZ_P>$kh>3nvKkavoX7d8^yRbJS A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# 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 literal 0 HcmV?d00001 diff --git a/code/static/avatar/3.png b/code/static/avatar/3.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3c1c1a31c25e423a3094eb9fa3f73ab6cdd0f6 GIT binary patch literal 143877 zcmcF~1y3bR&o=J5_~Opu?hcFF;_mM5aL|LhySux)>sj1kaks@5Iq=@k_aDAVnn@>3 zn#^=My{2uHijp)c(sv{X2nbYJ8A(+L2uSw-5dz$QD?a1;WB*N%ZmQDa5cTs!=l?M< zR$_``5D-lX$R8%K|M7^SlJ^5B>Rk>GbiuzW(B%x|UIe-e4(L23r=6^*rj$y<+kaf12#Zaw#`&R^!--`0}# zTfAiV#@z>QV-!GI8TZ_P>$kh>3nvKkavoX7d8^yRbJS A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# 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 literal 0 HcmV?d00001 diff --git a/code/static/avatar/4.png b/code/static/avatar/4.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3c1c1a31c25e423a3094eb9fa3f73ab6cdd0f6 GIT binary patch literal 143877 zcmcF~1y3bR&o=J5_~Opu?hcFF;_mM5aL|LhySux)>sj1kaks@5Iq=@k_aDAVnn@>3 zn#^=My{2uHijp)c(sv{X2nbYJ8A(+L2uSw-5dz$QD?a1;WB*N%ZmQDa5cTs!=l?M< zR$_``5D-lX$R8%K|M7^SlJ^5B>Rk>GbiuzW(B%x|UIe-e4(L23r=6^*rj$y<+kaf12#Zaw#`&R^!--`0}# zTfAiV#@z>QV-!GI8TZ_P>$kh>3nvKkavoX7d8^yRbJS A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# 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 literal 0 HcmV?d00001 diff --git a/code/static/avatar/5.png b/code/static/avatar/5.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3c1c1a31c25e423a3094eb9fa3f73ab6cdd0f6 GIT binary patch literal 143877 zcmcF~1y3bR&o=J5_~Opu?hcFF;_mM5aL|LhySux)>sj1kaks@5Iq=@k_aDAVnn@>3 zn#^=My{2uHijp)c(sv{X2nbYJ8A(+L2uSw-5dz$QD?a1;WB*N%ZmQDa5cTs!=l?M< zR$_``5D-lX$R8%K|M7^SlJ^5B>Rk>GbiuzW(B%x|UIe-e4(L23r=6^*rj$y<+kaf12#Zaw#`&R^!--`0}# zTfAiV#@z>QV-!GI8TZ_P>$kh>3nvKkavoX7d8^yRbJS A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# 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 literal 0 HcmV?d00001 diff --git a/code/static/avatar/6.png b/code/static/avatar/6.png new file mode 100644 index 0000000000000000000000000000000000000000..5a3c1c1a31c25e423a3094eb9fa3f73ab6cdd0f6 GIT binary patch literal 143877 zcmcF~1y3bR&o=J5_~Opu?hcFF;_mM5aL|LhySux)>sj1kaks@5Iq=@k_aDAVnn@>3 zn#^=My{2uHijp)c(sv{X2nbYJ8A(+L2uSw-5dz$QD?a1;WB*N%ZmQDa5cTs!=l?M< zR$_``5D-lX$R8%K|M7^SlJ^5B>Rk>GbiuzW(B%x|UIe-e4(L23r=6^*rj$y<+kaf12#Zaw#`&R^!--`0}# zTfAiV#@z>QV-!GI8TZ_P>$kh>3nvKkavoX7d8^yRbJS A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# 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 literal 0 HcmV?d00001 From 6c4035287723cd0c8ff8ef685e25ffc9fb1e7cf0 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Fri, 18 Jul 2014 16:02:30 +0800 Subject: [PATCH 46/66] index --- code/dbapi.py | 24 +++++++++++++++++- code/handler/CheckrelativesHandler.py | 1 + code/handler/GetArroundEvent.py | 7 +++--- code/handler/HelpmessageHandler.py | 7 ++++-- code/handler/LoginHandler.py | 4 ++- db.sql | 36 +++++++++++++-------------- 6 files changed, 53 insertions(+), 26 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 560ab0c..e4385db 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -11,6 +11,8 @@ def __init__(self): self.host="localhost" self.user="comhelp" self.passwd="20140629" + #self.user="root" + #self.passwd="root" self.dbname="community" self.charset="utf8" self.db=MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.dbname,charset=self.charset) @@ -42,6 +44,15 @@ def updateUserstate(self,uid,state): cursor.close() return + def updateUseLBS(self,latitude,longitude,uid): + cursor = self.db.cursor() + sql = "update info set latitude = %s , longitude = %s where id = %s" + param =(latitude,longitude,uid) + cursor.execute(sql,param) + self.db.commit() + cursor.close() + return + #get user userfull info in user+info #pre con: user exist #after: return a dict result include all info of user @@ -89,6 +100,16 @@ def getEventByEventId(self,eventid): cursor.close() return result + def getEventandUserByEventId(self,eventid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select user.name,content,starttime as time,event.kind as kind,event.id from event,user where event.id=%s" + param=(eventid,) + cursor.execute(sql,param) + result=cursor.fetchone() + result['time'] = result['time'].strftime('%Y-%m-%d %H:%M:%S') + cursor.close() + return result + def getEventsByUserId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="select * from event where usrid=%s" @@ -290,6 +311,7 @@ def getEventAround(self,lon,lat,distance): cursor.execute(sql,param) result = [] for row in cursor.fetchall(): + row['starttime'] = row['starttime'].strftime('%Y-%m-%d %H:%M:%S') result.append(row) cursor.close() return result @@ -308,7 +330,7 @@ def getUserCidAround(self,lon,lat,distance): cursor.execute(sql,param) result = [] for row in cursor.fetchall(): - result.append(row) + result.append(row['cid']) cursor.close() return result diff --git a/code/handler/CheckrelativesHandler.py b/code/handler/CheckrelativesHandler.py index a49cba9..82bb47e 100644 --- a/code/handler/CheckrelativesHandler.py +++ b/code/handler/CheckrelativesHandler.py @@ -2,6 +2,7 @@ import tornado.ioloop import tornado.web import tornado.httpserver +from tornado.escape import * import os,json class CheckrelativesHandler(tornado.web.RequestHandler): def get(self): diff --git a/code/handler/GetArroundEvent.py b/code/handler/GetArroundEvent.py index 569fbac..c0242be 100644 --- a/code/handler/GetArroundEvent.py +++ b/code/handler/GetArroundEvent.py @@ -1,6 +1,7 @@ import tornado.ioloop import tornado.web import tornado.httpserver +from tornado.escape import * import json class GetArroundEvent(tornado.web.RequestHandler): @@ -8,8 +9,8 @@ def get(self): self.write("

GetArroundEvent

") def post(self): - content =self.request.body - #content='{"username":"test1"}' + #content =self.request.body + content='{"username":"test1"}' j=json.loads(content) user = self.application.dbapi.getUserInfobyName(j['username']) if(user is None): @@ -17,5 +18,5 @@ def post(self): print "username not exist" return result = self.application.dbapi.getEventAround(user['longitude'],user['latitude'],150) - self.write("{'state':1,aids:"+str(result)+"}") + self.write("{'state':1,events:"+json_encode(result)+"}") return diff --git a/code/handler/HelpmessageHandler.py b/code/handler/HelpmessageHandler.py index 0bd64a4..af99333 100644 --- a/code/handler/HelpmessageHandler.py +++ b/code/handler/HelpmessageHandler.py @@ -2,6 +2,7 @@ import tornado.ioloop import tornado.web import tornado.httpserver +from tornado.escape import * import json class HelpmessageHandler(tornado.web.RequestHandler): @@ -15,9 +16,11 @@ def post(self): result = self.application.dbapi.addEventByUserName(jobj["username"],jobj["message"]) #add push message,make all distance 5km if(result["state"] == 1): + eventinfo = self.application.dbapi.getEventandUserByEventId(result['eventid']) + print '{"type":"help","data":'+json_encode(eventinfo)+'}' info = self.application.dbapi.getUserInfobyName(jobj["username"]) cidlist = self.application.dbapi.getUserCidAround(info["longitude"],info["latitude"],5) - self.application.push.pushToList(cidlist,content) + self.application.push.pushToList(cidlist,'{"type":"help","data":'+json_encode(eventinfo)+'}') - self.write(str(result)) + self.write(json_encode(result)) return \ No newline at end of file diff --git a/code/handler/LoginHandler.py b/code/handler/LoginHandler.py index 8e14dcc..464a5fc 100644 --- a/code/handler/LoginHandler.py +++ b/code/handler/LoginHandler.py @@ -10,7 +10,7 @@ def get(self): def post(self): content =self.request.body - #content = '{"username":"12","password":"1"}' + #content = '{"username":"12","password":"1","latitude":23.000000,"longitude":23.000000}' j = json.loads(content) if(j['username'].strip()=='' or j['password'].strip()==''): self.write("{'state':1}") @@ -25,6 +25,8 @@ def post(self): self.write("{'state':2}") print "passwd incorrect" return + if("latitude" in j): + self.application.dbapi.updateUseLBS(j['latitude'],j['longitude'],user['id']) self.application.dbapi.updateUserstate(user['id'],1) self.write("{'state':3}") print("Login success") diff --git a/db.sql b/db.sql index 5528ed7..e164717 100644 --- a/db.sql +++ b/db.sql @@ -2,6 +2,7 @@ drop table IF EXISTS support; drop table IF EXISTS helper; drop table IF EXISTS follow; +drop table IF EXISTS temprelation; drop table IF EXISTS event; drop table IF EXISTS relation; drop table IF EXISTS info; @@ -195,19 +196,19 @@ CREATE TABLE temprelation /* 添加6用户(3男3女): */ -insert into user(name,kind,password,state) values("test1",1,"passwordtest1",1); -insert into user(name,kind,password,state) values("test2",2,"密码test2",1); -insert into user(name,kind,password,state) values("test3",3,"passwordtest3",1); -insert into user(name,kind,password,state) values("测试test4",1,"passwordtest4",0); -insert into user(name,kind,password,state) values("test5",2,"passwordtest5",1); -insert into user(name,kind,password,state) values("test6",3,"passwordtest6",0); - -insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(1,"test1cardid","realtest1",1,21,"广州耶1","你才有病",0,0,23.000000,23.000000); -insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(2,"test2cardid","realtest2",1,25,"广州耶2","我有病",0,0,23.001000,23.000000); -insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(3,"测试test3cardid","realtest3",1,46,"广州耶3","你才有病",0,0,23.000000,23.001000); -insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(4,"test4cardid","测试realtest4",2,21,"广州耶4","我有病",0,0,23.00000,24.000000); -insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(5,"test5cardid","realtest5",2,15,"广州耶5","你才有病",0,0,24.000000,23.000000); -insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(6,"test6cardid","realtest6",2,65,"广州耶6","我有病",0,0,25.000000,25.000000); +insert into user(name,kind,password,state) values("test1",1,"1",1); +insert into user(name,kind,password,state) values("test2",2,"t2",1); +insert into user(name,kind,password,state) values("test3",3,"3",1); +insert into user(name,kind,password,state) values("test4",1,"4",0); +insert into user(name,kind,password,state) values("test5",2,"5",1); +insert into user(name,kind,password,state) values("test6",3,"6",0); + +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(1,"test1cardid","realtest1",1,21,"Guangzhou","illness",0,0,23.000000,23.000000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(2,"test2cardid","realtest2",1,25,"Guangzhou","illness",0,0,23.001000,23.000000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(3,"test3cardid","realtest3",1,46,"Guangzhou","illness",0,0,23.000000,23.001000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(4,"test4cardid","realtest4",2,21,"Guangzhou","illness",0,0,23.00000,24.000000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(5,"test5cardid","realtest5",2,15,"Guangzhou","illness",0,0,24.000000,23.000000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(6,"test6cardid","realtest6",2,65,"Guangzhou","illness",0,0,25.000000,25.000000); /* 绑定关系1->2,1->4,2->6,2->5: */ @@ -221,9 +222,9 @@ insert into relation(usrid,cid,kind) values(2,5,2); 事件1:3发起 生活2 事件1:6发起 健康3 */ -insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(1,1,0,"安全事件啦",23.001000,23.001000,"2014-07-14 16:55:54"); -insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(3,2,0,"生活事件啦",25.001000,23.001000,"2014-07-15 08:45:54"); -insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(6,3,0,"健康事件啦",23.001020,23.001030,"2014-07-15 08:00:54"); +insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(1,1,0,"event1",23.001000,23.001000,"2014-07-14 16:55:54"); +insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(3,2,0,"event2",25.001000,23.001000,"2014-07-15 08:45:54"); +insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(6,3,0,"event3",23.001020,23.001030,"2014-07-15 08:00:54"); /* 添加helper @@ -251,6 +252,3 @@ insert into support(eid,usrid,content,time) values(2,5,"5援助事件2","2014-07 insert into support(eid,usrid,content,time) values(3,3,"3援助事件3","2014-07-15 08:10:54"); insert into support(eid,usrid,content,time) values(3,5,"5援助事件4","2014-07-15 08:10:54"); - - - From d09cd929de0917a6a4c58f10bba106f9704c7ae7 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Fri, 18 Jul 2014 17:25:27 +0800 Subject: [PATCH 47/66] add ThirdPart index and fix eventHandler --- code/dbapi.py | 17 ++-- code/handler/CheckrelativesHandler.py | 4 +- code/handler/EventHandler.py | 10 +- code/handler/LoginHandler.py | 4 +- code/handler/ThirdPartHandlers.py | 134 ++++++++++++++++++++++++++ code/handler/__init__.py | 3 +- code/main.py | 5 +- 7 files changed, 160 insertions(+), 17 deletions(-) create mode 100644 code/handler/ThirdPartHandlers.py diff --git a/code/dbapi.py b/code/dbapi.py index 2a11831..48ec46b 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -9,10 +9,10 @@ class dbapi: def __init__(self): self.host="localhost" - self.user="comhelp" - self.passwd="20140629" - #self.user="root" - #self.passwd="root" + #self.user="comhelp" + #self.passwd="20140629" + self.user="root" + self.passwd="root" self.dbname="community" self.charset="utf8" self.db=MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.dbname,charset=self.charset) @@ -102,7 +102,7 @@ def getEventByEventId(self,eventid): def getEventandUserByEventId(self,eventid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="select user.name,content,starttime as time,event.kind as kind,event.id from event,user where event.id=%s" + sql="select user.name,content,starttime as time,event.kind as kind,event.id as id, event.latitude as latitude,event.longitude as longitude from event,user where event.id=%s" param=(eventid,) cursor.execute(sql,param) result=cursor.fetchone() @@ -670,8 +670,11 @@ def getSupportsByEventId(self,eid): sql="select * from support where eid=%s" param=(eid,) cursor.execute(sql,param) - result=cursor.fetchall() - return list(result) + result=[] + for item in cursor.fetchall(): + item['time'] = item['time'].strftime('%Y-%m-%d %H:%M:%S') + result.append(item) + return result def __del__(self): self.db.close() diff --git a/code/handler/CheckrelativesHandler.py b/code/handler/CheckrelativesHandler.py index 82bb47e..36d3ed7 100644 --- a/code/handler/CheckrelativesHandler.py +++ b/code/handler/CheckrelativesHandler.py @@ -19,8 +19,8 @@ def post(self): for row in re: info=self.application.dbapi.getUsermassegeByUserId(row["cid"]) #relatives.append('{"info":'+str(info)+',"avatar":'+self.application.util.getAvatarbyUid(info['id'])+'}') - relatives.append(info) - data={'state':1,'ralatives':relatives} + relatives.append(json_encode(info)) + data={'state':1,'ralatives':json_encode(relatives)} else: data={'state':1,'relatives':'[]'} self.write(data) diff --git a/code/handler/EventHandler.py b/code/handler/EventHandler.py index a1b9684..c0786f9 100644 --- a/code/handler/EventHandler.py +++ b/code/handler/EventHandler.py @@ -1,6 +1,7 @@ import tornado.ioloop import tornado.web import tornado.httpserver +from tornado.escape import * import json class EventHandler(tornado.web.RequestHandler): @@ -13,7 +14,7 @@ def post(self): #content=self.request.body content='{"eventid":1}' jobj=json.loads(content) - helpevent=self.application.dbapi.getEventByEventId(jobj['eventid']) + helpevent=self.application.dbapi.getEventandUserByEventId(jobj['eventid']) result={} if(helpevent): result['event']=helpevent @@ -23,6 +24,7 @@ def post(self): user=self.application.dbapi.getUserByUserId(support['usrid']) if(user): support['username']=user['name']; - avatar=self.application.util.getAvatar(user['name'],self.application.dbapi) - support['avatar']=avatar - self.write(str(result)); \ No newline at end of file + #avatar=self.application.util.getAvatar(user['name'],self.application.dbapi) + #support['avatar']=avatar + print json_encode(result) + self.write(json_encode(result)); \ No newline at end of file diff --git a/code/handler/LoginHandler.py b/code/handler/LoginHandler.py index 464a5fc..d78c10d 100644 --- a/code/handler/LoginHandler.py +++ b/code/handler/LoginHandler.py @@ -12,9 +12,9 @@ def post(self): content =self.request.body #content = '{"username":"12","password":"1","latitude":23.000000,"longitude":23.000000}' j = json.loads(content) - if(j['username'].strip()=='' or j['password'].strip()==''): + if(j['username'].strip()=='' ): self.write("{'state':1}") - print "username or password is null" + print "username is null" return user = self.application.dbapi.getUserByUserName(j['username']) if(user is None): diff --git a/code/handler/ThirdPartHandlers.py b/code/handler/ThirdPartHandlers.py new file mode 100644 index 0000000..19233f8 --- /dev/null +++ b/code/handler/ThirdPartHandlers.py @@ -0,0 +1,134 @@ +# coding: utf-8 +# Filename: ThirdPartHandlers.py +__author__ = 'Administrator' + +import tornado.web +import json +import urllib + +# 2014-07-17 +# +# post: access_token, platform +# return: result +# actions: +# visit get_token_info +# check for binding +# create new user +# bind user +# update user state +# 我需要与前后台协商,除了本地登录之外,在增加第三方专用的返回值。这里就将就一下 + +class ThirdPartyLoginHandler(tornado.web.RequestHandler): + platformapi = { "sinaweibo": "https://api.weibo.com/oauth2/get_token_info" } + + def post(self): + # 获取参数access_token和platform + access_token = self.get_argument("access_token") + platform = self.get_argument("platform") + # 根据platform获取对应的api地址 + url = ThirdPartyLoginHandler.platformapi.get(platform) + # 生成api参数。这里只考虑了sinaweibo的参数格式。需要改进。 + # urllib的post参数为字符串 + data = "access_token=" + access_token + try: + # 访问授权服务器,获取返回值 + result = urllib.urlopen(url, data).read() + print(result) + except IOError: + # 有可能出错,这时我们认为用户使用的是虚假令牌,认为登录失败 + print("IOError: fake access_token") + # 登录失败返回state:1 + self.write("{\"state\":1}") + return + # 解析返回值,这里依旧只考虑了新浪微博 + j = json.loads(result) + expire_in = j["expire_in"] + # 如果令牌超时,则驳回请求 + if expire_in <= 0: + # 返回state:1 + self.write("{\"state\":1}") + return + # 第三方不需要在本系统中设置用户名,因此自动生成一个作为第三方用户的唯一标识 + username = "*" + platform + ("%i" % j["uid"]) + # 这里做简单处理:直接将星号+platform+uid作为用户名,不设密码 + # 其他用户不允许第一个符号是星号。一般的用户名只允许出现字母,数字,空格,和下划线。 + # 首先检查是否已经注册过 + record = self.application.dbapi.getUserByUserName(username) + if record == None: + # 如果用户不存在,则新建用户并且插入数据库 + # 新建用户时的参数参考dbapi的代码 + # content是字典格式 + # username:用户名;kind:分三种,这里可以设为1-普通用户;password:第三方用户不需密码 + # kind:int整数 + newUser = {"username": username, + "kind": 1, + "password": "", + "cardid": 0, + "realname": "", + "sex": "", + "age": 0, + "address": "", + "illness": ""} + self.application.dbapi.register(newUser) + # 再次取用户记录,因为需要获取uid,而uid是系统自动分配的 + record = self.application.dbapi.getUserByUserName(username) + # 现在新用户与老用户到了同一状态 + # 现在我们认为用户已经登录成功了,需要更新用户的状态为已登录 + # 这一部分可以参考正常的loginhandler + uid = record["id"] + self.application.dbapi.updateUserstate(uid, 1) # 登录状态为数字1 + # 返回登录成功的返回值 + self.write("{\"state\":3}") # 3表示登录成功 + print("third party login succeed") + return + +# 在第三方登录成功之后,第三方用户状态就与本地用户相同了。这里的登出过程也几乎没有区别 +class ThirdPartyLogoutHandler(tornado.web.RequestHandler): + # 数据库的所有操作都没有进行用户是否已经登录的检查。 + # 鉴于这种检查时普遍操作,可能会作为任何一项需要特权的操作的前置操作,仅仅需要修改少数类,因此这里不做检查,等待小组长修复该bug + # 这里需要将访问方式改为post。之前考虑失误。显然应该是post + def post(self): + # 这与正常的登出一模一样。直接copy代码。 + # 这里用到了username。按照我的预想,是不需要username的。但是第一版可以简单设计。 + # 这需要我修改几处anroid代码 + # 其他人采用json格式传输数据。我这里并没有采用,而是直接使用参数传递。 + username = self.get_argument("username") + # 因为假设所有的特权操作都经过了检查,因此不必考虑用户不存在的情况 + record = self.application.dbapi.getUserByUserName(username) + uid = record["id"] + self.application.dbapi.updateUserstate(uid, 0) + self.write("{'state':1}") + self.write("Third Party Logout Test") + +class ThirdPartyRemoveAccountHandler(tornado.web.RequestHandler): + # 与前面一个一样,这里的get也是不对的,需要改为post + def post(self): + # 这里也与正常注销几乎一样 + # 一般情况下,注销用户需要第二次检查,要求用户再次登录 + # 对于我们,就是再次传输了access_token + access_token = self.get_argument("access_token") + # 下面的一段是直接复制的,这与thirdpartylogin是一样的操作 + platform = self.get_argument("platform") + url = ThirdPartyLoginHandler.platformapi.get(platform) + data = "access_token=" + access_token + try: + result = urllib.urlopen(url, data).read() + print(result) + except IOError: + print("IOError: fake access_token") + self.write("{\"state\":1}") + return + j = json.loads(result) + expire_in = j["expire_in"] + if expire_in <= 0: + # 返回state:1 + self.write("{\"state\":1}") + return + # 至此,认为用户的第二次认证成功 + # 获取用户id,删除用户 + username = "*" + platform + ("%i" % j["uid"]) + record = self.application.dbapi.getUserByUserName(username) + uid = record["id"] + self.application.dbapi.cancelUser(uid) + # 用户已删除,这是返回登录成功的返回值,暗示了用户已删除 + self.write("{\"state\":3}") diff --git a/code/handler/__init__.py b/code/handler/__init__.py index 1aecfa3..64c745c 100644 --- a/code/handler/__init__.py +++ b/code/handler/__init__.py @@ -19,4 +19,5 @@ "UpdateUserInfoHandler", "startFollowHandler", "cancelFollowHandler", - "GetArroundEvent"] + "GetArroundEvent", + "ThirdPartHandlers"] diff --git a/code/main.py b/code/main.py index 0968b21..bc1d943 100644 --- a/code/main.py +++ b/code/main.py @@ -38,7 +38,10 @@ def __init__(self): (r"/api/updateuserinfo",UpdateUserInfoHandler.UpdateUserInfoHandler), (r"/api/getAround",GetArroundEvent.GetArroundEvent), (r"/api/startfollow",startFollowHandler.startFollowHandler), - (r"/api/cancelfollow",cancelFollowHandler.cancelFollowHandler)] + (r"/api/cancelfollow",cancelFollowHandler.cancelFollowHandler), + (r"/api/thirdpartlogin",ThirdPartHandlers.ThirdPartyLoginHandler), + (r"/api/thirdpartlogout",ThirdPartHandlers.ThirdPartyLogoutHandler), + (r"/api/thirdpartremove",ThirdPartHandlers.ThirdPartyRemoveAccountHandler)] tornado.web.Application.__init__(self,handlers,**settings) self.dbapi=dbapi.dbapi() self.util=util.util() From 246ac433e6512e240021f3fd9d54d47a75cd7dca Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Mon, 21 Jul 2014 10:23:27 +0800 Subject: [PATCH 48/66] fix bug in Event --- code/dbapi.py | 2 ++ db.sql | 18 +++++++++--------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 48ec46b..731c3a5 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -107,6 +107,8 @@ def getEventandUserByEventId(self,eventid): cursor.execute(sql,param) result=cursor.fetchone() result['time'] = result['time'].strftime('%Y-%m-%d %H:%M:%S') + result['longitude'] = float(result['longitude']) + result['latitude'] = float(result['latitude']) cursor.close() return result diff --git a/db.sql b/db.sql index e164717..3f096c9 100644 --- a/db.sql +++ b/db.sql @@ -203,12 +203,12 @@ insert into user(name,kind,password,state) values("test4",1,"4",0); insert into user(name,kind,password,state) values("test5",2,"5",1); insert into user(name,kind,password,state) values("test6",3,"6",0); -insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(1,"test1cardid","realtest1",1,21,"Guangzhou","illness",0,0,23.000000,23.000000); -insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(2,"test2cardid","realtest2",1,25,"Guangzhou","illness",0,0,23.001000,23.000000); -insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(3,"test3cardid","realtest3",1,46,"Guangzhou","illness",0,0,23.000000,23.001000); -insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(4,"test4cardid","realtest4",2,21,"Guangzhou","illness",0,0,23.00000,24.000000); -insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(5,"test5cardid","realtest5",2,15,"Guangzhou","illness",0,0,24.000000,23.000000); -insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(6,"test6cardid","realtest6",2,65,"Guangzhou","illness",0,0,25.000000,25.000000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(1,"test1cardid","realtest1",1,21,"Guangzhou","illness",0,0,23.070000,113.400000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(2,"test2cardid","realtest2",1,25,"Guangzhou","illness",0,0,23.070000,113.400000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(3,"test3cardid","realtest3",1,46,"Guangzhou","illness",0,0,23.070000,113.400000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(4,"test4cardid","realtest4",2,21,"Guangzhou","illness",0,0,23.070000,113.400000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(5,"test5cardid","realtest5",2,15,"Guangzhou","illness",0,0,23.070000,113.400000); +insert into info(id,cardid,name,sex,age,address,illness,credit,score,latitude,longitude) values(6,"test6cardid","realtest6",2,65,"Guangzhou","illness",0,0,23.070000,113.400000); /* 绑定关系1->2,1->4,2->6,2->5: */ @@ -222,9 +222,9 @@ insert into relation(usrid,cid,kind) values(2,5,2); 事件1:3发起 生活2 事件1:6发起 健康3 */ -insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(1,1,0,"event1",23.001000,23.001000,"2014-07-14 16:55:54"); -insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(3,2,0,"event2",25.001000,23.001000,"2014-07-15 08:45:54"); -insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(6,3,0,"event3",23.001020,23.001030,"2014-07-15 08:00:54"); +insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(1,1,0,"event1",23.070000,113.400000,"2014-07-14 16:55:54"); +insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(3,2,0,"event2",23.070000,113.400000,"2014-07-15 08:45:54"); +insert into event(usrid,kind,state,content,latitude,longitude,starttime) values(6,3,0,"event3",23.070000,113.400000,"2014-07-15 08:00:54"); /* 添加helper From c111e2aca3f0044e267b0b1d34e1396d9814a627 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Fri, 25 Jul 2014 10:36:10 +0800 Subject: [PATCH 49/66] =?UTF-8?q?=E8=B0=83=E6=95=B4=E7=BB=93=E6=9E=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- code/dbapi.py | 235 +++++++++++++++++++------ code/handler/AddaidHandler.py | 18 -- code/handler/AddrelativesHandler.py | 27 --- code/handler/AuthenHandler.py | 10 -- code/handler/CancelHandler.py | 29 --- code/handler/CheckrelativesHandler.py | 26 --- code/handler/DeleterelativesHandler.py | 27 --- code/handler/EventHandler.py | 230 +++++++++++++++++++++++- code/handler/FinishHandler.py | 29 --- code/handler/FollowHandler.py | 51 ++++++ code/handler/GetArroundEvent.py | 7 +- code/handler/GivecreditHandler.py | 18 -- code/handler/HelpmessageHandler.py | 26 --- code/handler/HistoryHandler.py | 14 +- code/handler/LoginHandler.py | 34 ---- code/handler/LogoutHandler.py | 16 -- code/handler/QuitaidHandler.py | 26 --- code/handler/RegisterHandler.py | 33 ---- code/handler/RelativesHandler.py | 101 +++++++++++ code/handler/SendsupportHandler.py | 15 -- code/handler/SupportmessageHandler.py | 35 ---- code/handler/ThirdPartHandlers.py | 32 +++- code/handler/UpdateCid.py | 23 --- code/handler/UpdateUserInfoHandler.py | 23 --- code/handler/UserHandler.py | 184 +++++++++++++++++++ code/handler/UserInfoHandler.py | 43 +++++ code/handler/__init__.py | 24 +-- code/handler/cancelFollowHandler.py | 27 --- code/handler/startFollowHandler.py | 26 --- code/main.py | 55 +++--- code/static/avatar/1.png | Bin 143877 -> 48120 bytes code/static/avatar/default.png | Bin 0 -> 48120 bytes code/static/avatar/test.png | Bin 143877 -> 0 bytes code/util.py | 24 +++ db.sql | 7 +- 35 files changed, 891 insertions(+), 584 deletions(-) delete mode 100644 code/handler/AddaidHandler.py delete mode 100644 code/handler/AddrelativesHandler.py delete mode 100644 code/handler/AuthenHandler.py delete mode 100644 code/handler/CancelHandler.py delete mode 100644 code/handler/CheckrelativesHandler.py delete mode 100644 code/handler/DeleterelativesHandler.py delete mode 100644 code/handler/FinishHandler.py create mode 100644 code/handler/FollowHandler.py delete mode 100644 code/handler/GivecreditHandler.py delete mode 100644 code/handler/HelpmessageHandler.py delete mode 100644 code/handler/LoginHandler.py delete mode 100644 code/handler/LogoutHandler.py delete mode 100644 code/handler/QuitaidHandler.py delete mode 100644 code/handler/RegisterHandler.py create mode 100644 code/handler/RelativesHandler.py delete mode 100644 code/handler/SendsupportHandler.py delete mode 100644 code/handler/SupportmessageHandler.py delete mode 100644 code/handler/UpdateCid.py delete mode 100644 code/handler/UpdateUserInfoHandler.py create mode 100644 code/handler/UserHandler.py create mode 100644 code/handler/UserInfoHandler.py delete mode 100644 code/handler/cancelFollowHandler.py delete mode 100644 code/handler/startFollowHandler.py create mode 100644 code/static/avatar/default.png delete mode 100644 code/static/avatar/test.png diff --git a/code/dbapi.py b/code/dbapi.py index 119de1a..c29eb8f 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -9,10 +9,10 @@ class dbapi: def __init__(self): self.host="localhost" - #self.user="comhelp" - #self.passwd="20140629" - self.user="root" - self.passwd="root" + self.user="comhelp" + self.passwd="20140629" + #self.user="root" + #self.passwd="root" self.dbname="community" self.charset="utf8" self.db=MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.dbname,charset=self.charset) @@ -35,6 +35,15 @@ def getUserByUserName(self,username): cursor.close() return result + def getHelperInfoByEid(self,eid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select user.name as username,user.id as uid from helper,user where helper.eid=%s and helper.usrid = user.id" + param=(eid,) + cursor.execute(sql,param) + result=cursor.fetchall() + cursor.close() + return result + def updateUserstate(self,uid,state): cursor = self.db.cursor() sql = "update user set state = %s where id = %s" @@ -102,7 +111,8 @@ def getEventByEventId(self,eventid): def getEventandUserByEventId(self,eventid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="select user.name,content,starttime as time,event.kind as kind,event.id as id, event.latitude as latitude,event.longitude as longitude from event,user where event.id=%s" + sql="""select user.name as username,user.id as userid,content,starttime as time,event.kind as kind,event.id as eventid, event.latitude as latitude,event.longitude as longitude from event,user + where event.id=%s and user.id = event.usrid""" param=(eventid,) cursor.execute(sql,param) result=cursor.fetchone() @@ -127,6 +137,15 @@ def getEventsByUserName(self,username): return [] return self.getEventsByUserId(user["id"]) + def getSupportBySid(self,sid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select * from support where id = %s" + param=(sid,) + cursor.execute(sql,param) + result=cursor.fetchone() + cursor.close() + return result + #get supports by uid def getSupportsbyUid(self,uid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) @@ -151,26 +170,32 @@ def insertFollow(self,uid,eid): currentTime=cursor.fetchone() sql = "insert into follow(eid,usrid,time) values(%s,%s,%s)" param = (eid,uid,currentTime['now()']) + state = 1 try: cursor.execute(sql,param) self.db.commit() + state = 1 except: self.db.rollback() + state = 0 cursor.close() - return + return state #delect follow uid->eid def delectFollow(self,uid,eid): cursor = self.db.cursor() sql = "delete from follow where eid = %s and usrid = %s" param = (eid,uid) + state = 1 try: cursor.execute(sql,param) self.db.commit() + state = 1 except: self.db.rollback() + state = 0 cursor.close() - return + return state #get follow by uid,eid #if no recode,rerun None;else return dir @@ -183,6 +208,49 @@ def getFollow(self,uid,eid): cursor.close() return result + def getFollowerCidByEid(self,eid): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select user.cid from follow,user where eid = %s and user.id = follow.usrid" + param = (eid,) + cursor.execute(sql,param) + result = [] + for row in cursor.fetchall(): + result.append(row['cid']) + cursor.close() + return result + + def getFollowsByEventId(self,eid): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select count(*) as count from follow where eid = %s" + param = (eid,) + cursor.execute(sql,param) + result=cursor.fetchone() + cursor.close() + return result + + + def getHelpersCidbyEid(self,eid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select cid from helper,user where eid = %s and helper.usrid = user.id" + param=(eid,) + cursor.execute(sql,param) + result = [] + for row in cursor.fetchall(): + result.append(row['cid']) + cursor.close() + return result + + def getRelativesCidbyUid(self,uid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select cid from relation,user where usrid = %s and usrid = user.id" + param=(eid,) + cursor.execute(sql,param) + result = [] + for row in cursor.fetchall(): + result.append(row['cid']) + cursor.close() + return result + #check if cardid exist #exist return dict #not exist return none @@ -246,25 +314,13 @@ def UpdateCidByuid(self,cid,uid): self.db.commit() cursor.close() return - - #insert support mseeage in event - #pre condiction:user.id,event.id exist;event.state = 0 - #after: uptate assist in event - def supportmessageinsert(self,content): - cursor = self.db.cursor() - sql ="update event set assist= %s where id = %s" - param = (content["assist"],content["eventid"]) - cursor.execute(sql,param) - self.db.commit() - cursor.close() - return #get all relativeName by user.id #return a list contain all relations(including uid) def getAllRelativeNamebyUid(self,uid): cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql = "select * from relation where usrid = %s" - param = (uid,) + sql = "select * from relation where usrid = %s and kind = %s" + param = (uid,1) rlist = [] rlist.append(uid) cursor.execute(sql,param) @@ -283,7 +339,7 @@ def changeEventState(self,eid): cursor.execute(sql,param) self.db.commit() cursor.close() - return + return currentTime['now()'] #cancle a user by user(id) #pre condiction: uid exist @@ -304,11 +360,12 @@ def getEventAround(self,lon,lat,distance): cursor = self.db. cursor(cursorclass=MySQLdb.cursors.DictCursor) #sql = "select round(6378.138*2*asin(sqrt(pow(sin( (event.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(event.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (event.longitude*pi()/180-(%s)*pi()/180)/2),2)))) from event" #param = (lat,lat,lon) - sql = """select event.id,user.name,event.kind,event.content,event.assist,event.starttime from event,user where + sql = """select event.id,user.name,event.kind,event.content,event.starttime,video,audio from event,user where exists(select id from event where event.latitude <= (%s+1) and event.latitude >= (%s-1) and longitude <= (%s+1) and longitude>=(%s-1)) and event.usrid = user.id and event.state = 0 - and round(6378.138*2*asin(sqrt(pow(sin( (event.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(event.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (event.longitude*pi()/180-(%s)*pi()/180)/2),2)))) < %s """ + and round(6378.138*2*asin(sqrt(pow(sin( (event.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(event.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (event.longitude*pi()/180-(%s)*pi()/180)/2),2)))) < %s + ORDER BY starttime DESC""" param = (lat,lat,lon,lon,lat,lat,lon,distance) cursor.execute(sql,param) result = [] @@ -336,6 +393,28 @@ def getUserCidAround(self,lon,lat,distance): cursor.close() return result + def getUserAround(self,lon,lat,distance): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = """select user.name as name from user,info where + exists(select id from info where latitude <= (%s+1) and latitude >= (%s-1) and longitude <= (%s+1) and longitude>=(%s-1)) + and user.id = info.id + and round(6378.138*2*asin(sqrt(pow(sin( (info.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(info.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (info.longitude*pi()/180-(%s)*pi()/180)/2),2)))) < %s""" + param = (lat,lat,lon,lon,lat,lat,lon,distance) + cursor.execute(sql,param) + sqlre = cursor.fetchall() + cursor.close + result = [] + if(sqlre): + for row in sqlre: + info = {} + info['username'] = row['name'] + result.append(info) + data={'state':1,'users':result} + else: + data={'state':0}#the user not exist,return state 0 + #result=json.dumps(data) + return data + #updateuser credit score in info,use for givecredit #pre cond:eid,uid exist,score >=0 #after: update data credit,score in info @@ -447,25 +526,34 @@ def deleteRelationByUsername(self, u_name, r_name): self.db.commit() cursor.close() - def addRelationByUsername(self, u_name, r_name): + def addRelationByUsername(self, u_name, r_name,kind): result = self.getUserByUserName(u_name) u_id = str(result["id"]) result = self.getUserByUserName(r_name) r_id = str(result["id"]) cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="INSERT INTO relation (usrid, cid, kind) VALUES ('" + u_id + "', '" + r_id + "', '1')" + sql="INSERT INTO relation (usrid, cid, kind) VALUES ('" + u_id + "', '" + r_id + "', '"+kind+"')" cursor.execute(sql) self.db.commit() cursor.close() - def addtempRelationByUsername(self, u_name, r_name): + def addtempRelationByUsername(self, u_name, r_name,kind): result = self.getUserByUserName(u_name) u_id = str(result["id"]) result = self.getUserByUserName(r_name) r_id = str(result["id"]) cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="INSERT INTO relation (usrid, cid, kind) VALUES ('" + u_id + "', '" + r_id + "', '1')" + sql="INSERT INTO temprelation (uid, cid, kind) VALUES ('" + u_id + "', '" + r_id + "', '"+kind+"')" cursor.execute(sql) + self.db.commit() + cursor.close() + + def deletetemprelation(self,uid,cid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="delete from temprelation where uid = %s,cid =%s" + param=(uid,cid) + cursor.execute(sql,param) + self.db.commit() cursor.close() def addaidhelper(self, u_name, e_id): @@ -527,51 +615,85 @@ def addEventByUserName(self,username,message): else: cursor.execute("select now()") currentTime=cursor.fetchone() + sql = "select * from event where usrid = %s and kind = %s and latitude = %s and longitude = %s and TIMESTAMPDIFF(MINUTE,%s,starttime)<= 10" + param = (usrid["id"],message["kind"],message['latitude'],message['longitude'],currentTime['now()']) + cursor.execute(sql,param) + if(cursor.fetchall()): + return {"state":4,"errorDesc":"cannnot send the same message in 10 minute"} sql="insert into event (usrid,kind,state,content,starttime,latitude,longitude) values (%s,%s,%s,%s,%s,%s,%s)" param=(usrid["id"],message["kind"],0,message["content"],currentTime['now()'],message['latitude'],message['longitude']) - if("assist" in message): - sql="insert into event (usrid,kind,state,content,assist,starttime,latitude,longitude) values (%s,%s,%s,%s,%s,%s,%s,%s)" - param=(usrid["id"],message["kind"],0,message["content"],message["assist"],currentTime['now()'],message['latitude'],message['longitude']) cursor.execute(sql,param) self.db.commit() - #return last insert id cursor.execute("select last_insert_id()") - return {"state":1,"errorDesc":"","eventid":cursor.fetchone()["last_insert_id()"]} + eid = cursor.fetchone()["last_insert_id()"] + if(message['videosign'] =="1" and message['audiosign'] =="1"): + slef.UpdateEventVideoAndAudio(eid) + elif(message['videosign'] =="1" and message['audiosign'] =="0"): + slef.UpdateEventVideo(eid) + elif(message['videosign'] =="0" and message['audiosign'] =="1"): + slef.UpdateEventAudio(eid) + return {"state":1,"errorDesc":"","eventid":eid} + cursor.close() + + def UpdateEventVideoAndAudio(self,eid): + cursor = self.db.cursor() + sql = "update event set video = %s,audio = %s where id = %s" + param = ('./static/Video/'+str(uid)+'/'+str(uid)+'.3gp','./static/Audio/'+str(uid)+'/'+str(uid)+'.amr',eid) + cursor.execute(sql,param) + self.db.commit() + cursor.close() + return + + def UpdateEventVideo(self,eid): + cursor = self.db.cursor() + sql = "update event set video = %s where id = %s" + param = ('./static/Video/'+str(uid)+'/'+str(uid)+'.3gp',eid) + cursor.execute(sql,param) + self.db.commit() cursor.close() + return + def UpdateEventAudio(self,eid): + cursor = self.db.cursor() + sql = "update event set audio = %s where id = %s" + param = ('./static/Audio/'+str(uid)+'/'+str(uid)+'.amr',eid) + cursor.execute(sql,param) + self.db.commit() + cursor.close() + return #07/09 #seach user by sex,age,kind and return the row of table user # it has 8 options def searchUserbySexAgeKind(self,content): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - if(content['sex']): - if(content['age']): - if(content['kind']): - sql="select user.id from user,info where info.sex=%s and info.age=%s and user.kind=%s" - param=(content['sex'],content['age'],content['kind']) + if('sex' in content): + if('fromage' in content): + if('kind' in content): + sql="select user.id from user,info where info.sex=%s and info.age>=%s and info.age<=%s and user.kind=%s and user.id = info.id" + param=(content['sex'],content['fromage'],content['endage'],content['kind']) else: - sql="select user.id from user,info where info.sex=%s and info.age=%s" - param=(content['sex'],content['age']) + sql="select user.id from user,info where info.sex=%s and info.age>=%s and info.age<=%s and user.id = info.id" + param=(content['sex'],content['fromage'],content['endage']) else: - if(content['kind']): - sql="select user.id from user,info where info.sex=%s and user.kind=%s" + if('kind' in content): + sql="select user.id from user,info where info.sex=%s and user.kind=%s and user.id = info.id" param=(content['sex'],content['kind']) else: - sql="select user.id from user,info where info.sex=%s" + sql="select info.id from info,user where info.sex=%s and user.id = info.id" param=(content['sex'],) else: - if(content['age']): - if(content['kind']): - sql="select user.id from user,info where info.age=%s and user.kind=%s" - param=(content['age'],content['kind']) + if('fromage' in content): + if('kind' in content): + sql="select user.id from user,info where info.age>=%s and info.age<=%s and user.kind=%s and user.id = info.id" + param=(content['fromage'],content['endage'],content['kind']) else: - sql="select user.id from user,info where info.age=%s" - param=(content['age'],) + sql="select user.id from user,info where info.age>=%s and info.age<=%s and user.id = info.id" + param=(content['fromage'],content['endage']) else: - if(content['kind']): - sql="select user.id from user,info where user.kind=%s" + if('kind' in content): + sql="select user.id from user,info where user.kind=%s and user.id = info.id" param=(content['kind'],) else: data=[{'state':0}]#input is null return state 0 @@ -579,13 +701,16 @@ def searchUserbySexAgeKind(self,content): return result cursor.execute(sql,param) result1=cursor.fetchall() + cursor.close() if(result1): userlist=[] for x in result1: - userlist.append(self.getUserByUserId(x['id'])) - data=[{'state':1},userlist]#return the user table successly + info = {} + info['username'] = self.getUserByUserId(x['id'])['name'] + userlist.append(info) + data={'state':1,'users':userlist}#return the user table successly else: - data=[{'state':2}]#the user not exist,return state 2 + data={'state':0}#the user not exist,return state 0 result=json.dumps(data) return result @@ -644,7 +769,7 @@ def addSupportByEventIdAndUserName(self,eid,username,message): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) cursor.execute("select now()") currentTime=cursor.fetchone() - sql="insert into support (eid,usrid,content,time) values (%s,%s,%s.%s)" + sql="insert into support (eid,usrid,content,time) values (%s,%s,%s,%s)" param=(eid,self.getUserIdByUserName(username)["id"],message["content"],currentTime['now()']) cursor.execute(sql,param) self.db.commit() diff --git a/code/handler/AddaidHandler.py b/code/handler/AddaidHandler.py deleted file mode 100644 index 26645b5..0000000 --- a/code/handler/AddaidHandler.py +++ /dev/null @@ -1,18 +0,0 @@ -'''Yeqin Zheng, 09/07/2014''' -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json - -''' Add a helper to an event. Succeed with "1" returned, else with "0". ''' - -class AddaidHandler(tornado.web.RequestHandler): - def get(self): - self.write("

AddaidHandler

") - def post(self): - #content =self.request.body - content = '{"username":"test1","eventid":"4"}' - j = json.loads(content) - - result = self.application.dbapi.addaidhelper(j['username'], j['eventid']) - self.write("{'state': " + result + "}") diff --git a/code/handler/AddrelativesHandler.py b/code/handler/AddrelativesHandler.py deleted file mode 100644 index 4b6ad81..0000000 --- a/code/handler/AddrelativesHandler.py +++ /dev/null @@ -1,27 +0,0 @@ -'''Yeqin Zheng, 09/07/2014''' -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json - -''' Add a relation between two users. Succeed with "1" returned, else with "0". ''' - -class AddrelativesHandler(tornado.web.RequestHandler): - def get(self): - self.write("

AddrelativesHandler

") - - def post(self): - #content =self.request.body - content = '{"u_name":"test1","r_name":"test2"}' - j = json.loads(content) - row = self.application.dbapi.getRelationByUsername(j['u_name'], j['r_name']) - if row == 0: - self.application.dbapi.addRelationByUsername(j['u_name'], j['r_name']) - self.application.dbapi.addtempRelationByUsername(j['u_name'], j['r_name']) - add_message = {'state': 1} - print "add relative success" - else: - add_message = {'state': 0} - print "two already has relative relation" - self.write(add_message) - return diff --git a/code/handler/AuthenHandler.py b/code/handler/AuthenHandler.py deleted file mode 100644 index cf94280..0000000 --- a/code/handler/AuthenHandler.py +++ /dev/null @@ -1,10 +0,0 @@ -import tornado.ioloop -import tornado.web -import tornado.httpserver -import os -class AuthenHandler(tornado.web.RequestHandler): - def get(self): - self.write("

AuthenHandler

") - - def post(self): - self.write("AuthenHandler") diff --git a/code/handler/CancelHandler.py b/code/handler/CancelHandler.py deleted file mode 100644 index 809f2ae..0000000 --- a/code/handler/CancelHandler.py +++ /dev/null @@ -1,29 +0,0 @@ -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json -class CancelHandler(tornado.web.RequestHandler): - def get(self): - self.write("

CancelHandler

") - - def post(self): - #content = self.get_argument("content") - content = '{"username":"test","password":"test"}' - j = json.loads(content) - if(j['username'].strip()=='' or j['password'].strip()==''): - self.write("{'state':1}") - print "username or password is null,can not cancel" - return - user = self.application.dbapi.getUserByUserName(j['username']) - if(user is None): - self.write("{'state':1}") - print "username not exist,can not cancel" - return - if(user["password"]!= j['password']): - self.write("{'state':2}") - print "passwd incorrect,can not cancel" - return - self.application.dbapi.cancelUser(user['id']) - self.write("{'state':3}") - print("cancel success") - return diff --git a/code/handler/CheckrelativesHandler.py b/code/handler/CheckrelativesHandler.py deleted file mode 100644 index 36d3ed7..0000000 --- a/code/handler/CheckrelativesHandler.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -import tornado.ioloop -import tornado.web -import tornado.httpserver -from tornado.escape import * -import os,json -class CheckrelativesHandler(tornado.web.RequestHandler): - def get(self): - self.write("

CheckrelativesHandler

") - - def post(self): - #content =self.request.body - content = '{"username":"test1"}' - j = json.loads(content) - userid=self.application.dbapi.getUserByUserName(j['username'])["id"] - re=self.application.dbapi.CheckRelationbyId(userid) - if re!=(): - relatives=[] - for row in re: - info=self.application.dbapi.getUsermassegeByUserId(row["cid"]) - #relatives.append('{"info":'+str(info)+',"avatar":'+self.application.util.getAvatarbyUid(info['id'])+'}') - relatives.append(json_encode(info)) - data={'state':1,'ralatives':json_encode(relatives)} - else: - data={'state':1,'relatives':'[]'} - self.write(data) diff --git a/code/handler/DeleterelativesHandler.py b/code/handler/DeleterelativesHandler.py deleted file mode 100644 index 17b7cad..0000000 --- a/code/handler/DeleterelativesHandler.py +++ /dev/null @@ -1,27 +0,0 @@ -'''Yeqin Zheng, 09/07/2014''' -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json - -''' Delete a relation between two users. Succeed with "1" returned, else with "0". ''' - -class DeleterelativesHandler(tornado.web.RequestHandler): - def get(self): - self.write("

DeleterelativesHandler

") - - def post(self): - #content =self.request.body - content = '{"username1":"ooo","username2":"11oo"}' - j = json.loads(content) - row = self.application.dbapi.getRelationByUsername(j['username1'],j['username2']) - if row == 0 : - delete_message = {'state': 0} - print "two has no relations" - else : - self.application.dbapi.deleteRelationByUsername(j['username1'],j['username2']) - print "delete relations success" - delete_message = {'state': 1} - - self.write(delete_message) - return diff --git a/code/handler/EventHandler.py b/code/handler/EventHandler.py index c0786f9..a833a87 100644 --- a/code/handler/EventHandler.py +++ b/code/handler/EventHandler.py @@ -2,24 +2,75 @@ import tornado.web import tornado.httpserver from tornado.escape import * +from sets import Set import json +class HelpmessageHandler(tornado.web.RequestHandler): + def get(self): + self.write("

HelpmessageHandler

") + + def post(self): + content =self.request.body + #content='{"username":"test1","video":"TestAssist","audeo":"dsds","message":{"kind":1,"content":"TestContent", "videosign":1,,"audiosign":1,"latitude":23.000000,"longitude":23.000000}}' + jobj=json.loads(content) + result = self.application.dbapi.addEventByUserName(jobj["username"],jobj["message"]) + #add push message,make all distance 5km + + if(jobj['message']['videosign'] == "1"): + self.application.util.setVideobyEid(result['eventid'],jobj['video']) + + if(jobj['message']['audiosign'] == "1"): + self.application.util.setAudiobyEid(result['eventid'],jobj['audio']) + + if(result["state"] == 1): + eventinfo = self.application.dbapi.getEventandUserByEventId(result['eventid']) + #eventinfo['audio'] = jobj['message']['videosign'] + #eventinfo['video'] = jobj['message']['audiosign'] + print '{"type":"help","data":'+json_encode(eventinfo)+'}' + info = self.application.dbapi.getUserInfobyName(jobj["username"]) + cidlist = self.application.dbapi.getUserCidAround(info["longitude"],info["latitude"],5) + cidlist = list(Set(cidlist)) + cid = self.application.dbapi.getUserByUserName(jobj['username'])['cid'] + cidlist.remove(cid) + self.application.push.pushToList(cidlist,'{"type":"help","data":'+json_encode(eventinfo)+'}') + + self.write(json_encode(result)) + return + class EventHandler(tornado.web.RequestHandler): def get(self): self.write("

eventHandler

") - #return format - #{event:{},support:{0:{},1:{}}} def post(self): - #content=self.request.body - content='{"eventid":1}' + content=self.request.body + #content='{"username":"test4","eventid":1}' jobj=json.loads(content) + uid = self.application.dbapi.getUserByUserName(jobj['username'])["id"] helpevent=self.application.dbapi.getEventandUserByEventId(jobj['eventid']) result={} if(helpevent): + helpevent['follows'] = self.application.dbapi.getFollowsByEventId(jobj['eventid'])['count'] + helpevent['helpers'] = len(self.application.dbapi.getHelpersCidbyEid(jobj['eventid'])) result['event']=helpevent + ishelper = self.application.dbapi.checkifUseraddHelper(uid,jobj['eventid']) + if(ishelper is None): + if(helpevent['username'] == jobj['username']): + result['ishelper'] = 1 + else: + result['ishelper'] = 0 + else: + result['ishelper'] = 1 + rNamelist = self.application.dbapi.getAllRelativeNamebyUid(helpevent['userid']) + print rNamelist + if(uid in rNamelist): + result['canend'] = 1 + else: + result['canend'] = 0 + if(self.application.dbapi.getFollow(uid,jobj['eventid']) is None): + result['isfollow'] = 0 + else: + result['isfollow'] = 1 result['support']=self.application.dbapi.getSupportsByEventId(jobj['eventid']) - for support in result['support']: user=self.application.dbapi.getUserByUserId(support['usrid']) if(user): @@ -27,4 +78,171 @@ def post(self): #avatar=self.application.util.getAvatar(user['name'],self.application.dbapi) #support['avatar']=avatar print json_encode(result) - self.write(json_encode(result)); \ No newline at end of file + self.write(json_encode(result)) + +'''Yeqin Zheng, 09/07/2014''' +''' Add a helper to an event. Succeed with "1" returned, else with "0". ''' +class AddaidHandler(tornado.web.RequestHandler): + def get(self): + self.write("

AddaidHandler

") + def post(self): + content = self.request.body + #content = '{"username":"test1","eventid":"4"}' + j = json.loads(content) + + result = self.application.dbapi.addaidhelper(j['username'], j['eventid']) + self.write("{'state': " + result + "}") + + +class FinishHandler(tornado.web.RequestHandler): + def get(self): + self.write("

FinishHandler

") + + def post(self): + content =self.request.body + #content = '{"username":"test1","eventid":1}' + j = json.loads(content) + uid = self.application.dbapi.getUserByUserName(j['username'])["id"] + event = self.application.dbapi.getEventByEventId(j['eventid']) + if(event is None): + self.write("{'state':1}") + print "event not exist" + return + rNamelist = self.application.dbapi.getAllRelativeNamebyUid(event["usrid"]) + print rNamelist + if(uid not in rNamelist): + self.write("{'state':2}") + print "user not relative or itself,can not update sate" + return + currenttime = self.application.dbapi.changeEventState(j['eventid']) + helpers = self.application.dbapi.getHelperInfoByEid(j['eventid']) + data = [] + for item in helpers: + info = {} + info['username'] = item['username'] + info['uid'] = item['uid'] + data.append(info) + #data.append("{'username':" + str(item['username']) + ",'uid':"+ str(item['uid'])+"}") + print data + writedata = {} + writedata['state'] = 3 + writedata['helpers'] = data + print writedata + #push + """pushlist = self.application.dbapi.getFollowerCidByEid(jobj['eid']) + helperlist = self.application.dbapi.getHelpersCidbyEid(jobj['eid']) + pushlist.extend(helperlist) + relativelist = self.application.dbapi.getRelativesCidbyUid(uid) + pushlist.extend(relativelist) + pushlist = list(Set(pushlist)) + cid = self.application.dbapi.getUserByUserName(j['username'])['cid'] + cidlist.remove(cid) + pushdata = {} + data = {} + pushdata['type'] = "endhelp" + data['eventid'] = j['eventid'] + data['time'] = currenttime.strftime('%Y-%m-%d %H:%M:%S') + pushdata['data'] = data + self.application.push.pushToList(pushlist,pushdata)""" + self.write(json_encode(writedata)) + print "finsh an event" + return + + +class GivecreditHandler(tornado.web.RequestHandler): + def get(self): + self.write("

GivecreditHandler

") + def post(self): + content =self.request.body + #content='{"eventid":4,"helpername":"test2","credit":3}' + #content='{"eventid":1,"credits":[{"username":"test2","cridit":5},{"username":"test6","cridit":1}]}' + jobj=json.loads(content) + result=[] + for issue in jobj["credits"]: + temp=self.application.dbapi.setCreditByEventIdAndUserName(jobj["eventid"],issue["username"],issue["cridit"]) + result.append({"helpername":issue["username"],"result":temp}); + self.write(str(result)) + +class QuitaidHandler(tornado.web.RequestHandler): + def get(self): + self.write("

QuitaidHandler

") + + def post(self): + content =self.request.body + #content = '{"username":"oo11o","eventid":5}' + j = json.loads(content) + uid = self.application.dbapi.getUserByUserName(j['username'])['id'] + if(self.application.dbapi.getEventByEventId(j['eventid'])['state'] == 1): + print "current had been end,you can not quit" + self.write("{'state':3}") + return + + if(self.application.dbapi.checkifUseraddHelper(uid,j['eventid']) is None): + print "user " + j['username'] +" do not add the aid first" + self.write("{'state':2}") + return + self.application.dbapi.deleteHelperbyUidEid(uid,j['eventid']) + print "quit success" + self.write("{'state':1}") + return + +class SendsupportHandler(tornado.web.RequestHandler): + def get(self): + self.write("

SendsupportHandler

") + + def post(self): + content =self.request.body + #content='{"username":"test1","eid":4,"message":{"content":"TestssCofffntent"}}' + jobj=json.loads(content) + result=self.application.dbapi.addSupportByEventIdAndUserName(jobj["eid"],jobj["username"],jobj["message"]) + """if(result['errorCode'] == 200): + pushlist = self.application.dbapi.getFollowerCidByEid(jobj['eid']) + datatemp = self.application.dbapi.getSupportBySid(result['supportid']) + pushdata = {} + data = {} + pushdata['type'] = 'aid' + data['user'] = jobj['username'] + data['content'] = datatemp['content'] + data['time'] = datatemp['time'].strftime('%Y-%m-%d %H:%M:%S') + data['eventid'] = jobj['eid'] + pushdata['data'] = data + self.application.push.pushToList(pushlist,pushdata)""" + self.write(json_encode(result)) + + +class SupportmessageHandler(tornado.web.RequestHandler): + def get(self): + self.write("

SupportmessageHandler

") + + def post(self): + content =self.request.body + content = '{"eventid": 3,"video": "ssssssssssssssss","audio":"ddddd"}' + """#content = '{"username": "ooo","eventid": 3,"video": "ssssssssssssssss","audio":""}' + j = json.loads(content) + us = self.application.dbapi.getUserByUserName(j['username']) + if(us is None): + self.write("{'state':1}") + print "username not exist" + return + print us["id"] + + event = self.application.dbapi.getEventByEventId(j['eventid']) + if(event is None): + self.write("{'state':2}") + print "event not exist" + return + if (event['state']==1): + self.write("{'state':3}") + print "event is end" + return + if(us["id"]==event["usrid"]): + self.application.dbapi.supportmessageinsert(j) + self.write("{'state':4}") + print "insert success" + return + return""" + j = json.loads(content) + if('video' in j): + self.application.util.setVideobyEid(j['eid'],j['video']) + if('audio' in j): + self.application.util.setAudiobyEid(j['eid'],j['video']) \ No newline at end of file diff --git a/code/handler/FinishHandler.py b/code/handler/FinishHandler.py deleted file mode 100644 index 5f6756c..0000000 --- a/code/handler/FinishHandler.py +++ /dev/null @@ -1,29 +0,0 @@ -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json - -class FinishHandler(tornado.web.RequestHandler): - def get(self): - self.write("

FinishHandler

") - - def post(self): - #content =self.request.body - content = '{"username":"test1","eventid":1}' - j = json.loads(content) - uid = self.application.dbapi.getUserByUserName(j['username'])["id"] - event = self.application.dbapi.getEventByEventId(j['eventid']) - if(event is None): - self.write("{'state':1}") - print "event not exist" - return - rNamelist = self.application.dbapi.getAllRelativeNamebyUid(event["usrid"]) - print rNamelist - if(uid not in rNamelist): - self.write("{'state':2}") - print "user not relative or itself,can not update sate" - return - self.application.dbapi.changeEventState(j['eventid']); - self.write("{'state':3}") - print "finsh an event" - return diff --git a/code/handler/FollowHandler.py b/code/handler/FollowHandler.py new file mode 100644 index 0000000..70c725e --- /dev/null +++ b/code/handler/FollowHandler.py @@ -0,0 +1,51 @@ +# -*- coding: utf-8 -*- +import tornado.ioloop +import tornado.web +import tornado.httpserver +import json + +class startFollowHandler(tornado.web.RequestHandler): + def get(self): + self.write("

startFollowHandler

") + + def post(self): + content =self.request.body + #content='{"eid":2,"username":"test2"}' + j=json.loads(content) + user=self.application.dbapi.getUserByUserName(j['username'])["id"] + if(user): + if(self.application.dbapi.getFollow(user,j['eid'])): + data={'state':3,'desc':"have been followed"}#have been followed + result=json.dumps(data) + else: + self.application.dbapi.insertFollow(user,j['eid']) + data={'state':1,'desc':"start follow success"}#start follow success + result=json.dumps(data) + else: + data={'state':2,'desc':"user no exist"}#user no exist + result=json.dumps(data) + self.write(result) + return + +class cancelFollowHandler(tornado.web.RequestHandler): + def get(self): + self.write("

cancelFollowHandler

") + + def post(self): + content =self.request.body + #content='{"eid":2,"username":"test2"}' + j=json.loads(content) + user=self.application.dbapi.getUserByUserName(j['username'])["id"] + if(user): + if(self.application.dbapi.getFollow(user,j['eid'])): + self.application.dbapi.delectFollow(user,j['eid']) + data={'state':1,'desc':"delete follow success"}#delete follow success + result=json.dumps(data) + else: + data={'state':3,'desc':"have no follow"}#have no follow + result=json.dumps(data) + else: + data={'state':2,'desc':"user no exist"}#user no exist + result=json.dumps(data) + self.write(result) + return diff --git a/code/handler/GetArroundEvent.py b/code/handler/GetArroundEvent.py index c0242be..bc568aa 100644 --- a/code/handler/GetArroundEvent.py +++ b/code/handler/GetArroundEvent.py @@ -9,14 +9,13 @@ def get(self): self.write("

GetArroundEvent

") def post(self): - #content =self.request.body - content='{"username":"test1"}' + content =self.request.body j=json.loads(content) user = self.application.dbapi.getUserInfobyName(j['username']) if(user is None): self.write("{'state':2}") print "username not exist" return - result = self.application.dbapi.getEventAround(user['longitude'],user['latitude'],150) - self.write("{'state':1,events:"+json_encode(result)+"}") + result = self.application.dbapi.getEventAround(user['longitude'],user['latitude'],5) + self.write("{'state':1,aids:"+json_encode(result)+"}") return diff --git a/code/handler/GivecreditHandler.py b/code/handler/GivecreditHandler.py deleted file mode 100644 index 67799e6..0000000 --- a/code/handler/GivecreditHandler.py +++ /dev/null @@ -1,18 +0,0 @@ -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json - -class GivecreditHandler(tornado.web.RequestHandler): - def get(self): - self.write("

GivecreditHandler

") - def post(self): - #content='{"eventid":4,"helpername":"test2","credit":3}' - content='{"eventid":1,"credits":[{"username":"test2","cridit":5},{"username":"test6","cridit":1}]}' - jobj=json.loads(content) - result=[] - for issue in jobj["credits"]: - temp=self.application.dbapi.setCreditByEventIdAndUserName(jobj["eventid"],issue["username"],issue["cridit"]) - result.append({"helpername":issue["username"],"result":temp}); - self.write(str(result)) - \ No newline at end of file diff --git a/code/handler/HelpmessageHandler.py b/code/handler/HelpmessageHandler.py deleted file mode 100644 index af99333..0000000 --- a/code/handler/HelpmessageHandler.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -import tornado.ioloop -import tornado.web -import tornado.httpserver -from tornado.escape import * -import json - -class HelpmessageHandler(tornado.web.RequestHandler): - def get(self): - self.write("

HelpmessageHandler

") - - def post(self): - content =self.request.body - #content='{"username":"test1","message":{"kind":1,"content":"TestContent","assist":"TestAssist","latitude":23.000000,"longitude":23.000000}}' - jobj=json.loads(content) - result = self.application.dbapi.addEventByUserName(jobj["username"],jobj["message"]) - #add push message,make all distance 5km - if(result["state"] == 1): - eventinfo = self.application.dbapi.getEventandUserByEventId(result['eventid']) - print '{"type":"help","data":'+json_encode(eventinfo)+'}' - info = self.application.dbapi.getUserInfobyName(jobj["username"]) - cidlist = self.application.dbapi.getUserCidAround(info["longitude"],info["latitude"],5) - self.application.push.pushToList(cidlist,'{"type":"help","data":'+json_encode(eventinfo)+'}') - - self.write(json_encode(result)) - return \ No newline at end of file diff --git a/code/handler/HistoryHandler.py b/code/handler/HistoryHandler.py index f99546d..b3efe06 100644 --- a/code/handler/HistoryHandler.py +++ b/code/handler/HistoryHandler.py @@ -2,6 +2,7 @@ import tornado.ioloop import tornado.web import tornado.httpserver +from tornado.escape import * import json class HistoryHandler(tornado.web.RequestHandler): @@ -9,8 +10,8 @@ def get(self): self.write("

historyHandler

") def post(self): - #content =self.request.body - content='{"name":"test3"}' + content =self.request.body + #content='{"name":"test3"}' jobj=json.loads(content) user = self.application.dbapi.getUserByUserName(jobj['name']) if(user is None): @@ -18,8 +19,15 @@ def post(self): return uid = user['id'] events=self.application.dbapi.getEventsByUserId(uid) + for item in events: + item['longitude'] = float(item['longitude']) + item['latitude'] = float(item['latitude']) + item['starttime'] = item['starttime'].strftime('%Y-%m-%d %H:%M:%S') + item['endtime'] = item['endtime'].strftime('%Y-%m-%d %H:%M:%S') #result=self.application.dbapi.getEventsByUserName(jobj['name']) supports = self.application.dbapi.getSupportsbyUid(uid) + for item in supports: + item['time'] = item['time'].strftime('%Y-%m-%d %H:%M:%S') - self.write('{"state":1,"events":'+str(events)+',"supports":'+str(supports)) + self.write('{"state":1,"events":'+json_encode(events)+',"supports":'+json_encode(supports)) return \ No newline at end of file diff --git a/code/handler/LoginHandler.py b/code/handler/LoginHandler.py deleted file mode 100644 index d78c10d..0000000 --- a/code/handler/LoginHandler.py +++ /dev/null @@ -1,34 +0,0 @@ -# -*- coding: utf-8 -*- -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json - -class LoginHandler(tornado.web.RequestHandler): - def get(self): - self.write("

LoginHandler

") - - def post(self): - content =self.request.body - #content = '{"username":"12","password":"1","latitude":23.000000,"longitude":23.000000}' - j = json.loads(content) - if(j['username'].strip()=='' ): - self.write("{'state':1}") - print "username is null" - return - user = self.application.dbapi.getUserByUserName(j['username']) - if(user is None): - self.write("{'state':1}") - print "username not exist" - return - if(user["password"]!= j['password']): - self.write("{'state':2}") - print "passwd incorrect" - return - if("latitude" in j): - self.application.dbapi.updateUseLBS(j['latitude'],j['longitude'],user['id']) - self.application.dbapi.updateUserstate(user['id'],1) - self.write("{'state':3}") - print("Login success") - #print self.application.util.getAvatar("12",self.application.dbapi) - return diff --git a/code/handler/LogoutHandler.py b/code/handler/LogoutHandler.py deleted file mode 100644 index da7ac74..0000000 --- a/code/handler/LogoutHandler.py +++ /dev/null @@ -1,16 +0,0 @@ -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json -class LogoutHandler(tornado.web.RequestHandler): - def get(self): - self.write("

LogoutHandler

") - - def post(self): - #content =self.request.body - content = '{"username":"11oo"}' - j = json.loads(content) - uid = self.application.dbapi.getUserByUserName(j['username'])['id'] - self.application.dbapi.updateUserstate(uid,0) - self.write("{'state':1}") - print("Logout success") \ No newline at end of file diff --git a/code/handler/QuitaidHandler.py b/code/handler/QuitaidHandler.py deleted file mode 100644 index 7c099e7..0000000 --- a/code/handler/QuitaidHandler.py +++ /dev/null @@ -1,26 +0,0 @@ -import tornado.ioloop -import tornado.web -import tornado.httpserver -import os,json -class QuitaidHandler(tornado.web.RequestHandler): - def get(self): - self.write("

QuitaidHandler

") - - def post(self): - #content =self.request.body - content = '{"username":"oo11o","eventid":5}' - j = json.loads(content) - uid = self.application.dbapi.getUserByUserName(j['username'])['id'] - if(self.application.dbapi.getEventByEventId(j['eventid'])['state'] == 1): - print "current had been end,you can not quit" - self.write("{'state':3}") - return - - if(self.application.dbapi.checkifUseraddHelper(uid,j['eventid']) is None): - print "user " + j['username'] +" do not add the aid first" - self.write("{'state':2}") - return - self.application.dbapi.deleteHelperbyUidEid(uid,j['eventid']) - print "quit success" - self.write("{'state':1}") - return diff --git a/code/handler/RegisterHandler.py b/code/handler/RegisterHandler.py deleted file mode 100644 index 8f73863..0000000 --- a/code/handler/RegisterHandler.py +++ /dev/null @@ -1,33 +0,0 @@ -# -*- coding: utf-8 -*- -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json,base64,os - -class RegisterHandler(tornado.web.RequestHandler): - def get(self): - self.write("

RegisterHandler

") - - def post(self): - content =self.request.body - #content = '{"username": "test","password": "1","kind": 1, "cardid":"test" ,"realname":"1","sex":1,"age":1, "address":"1","illness":"1","file":"1"}' - j = json.loads(content) - if(self.application.dbapi.getUserByUserName(j['username']) is not None): - self.write("{'state':1}") - print "username exist" - return - if(self.application.dbapi.getInfoBycardid(j['cardid']) is not None): - self.write("{'state':2}") - print "cardid exist" - return - self.application.dbapi.register(j) - - #test - #avatar=open(os.path.abspath('./static/avatar/test.png'),"rb"); - #ilestring=base64.standard_b64encode(avatar.read()) - #self.application.util.setAvatar(j['username'],filestring,self.application.dbapi) - - #self.application.util.setAvatar(j['username'],j['file'],self.application.dbapi) - self.write("{'state':3}") - print("Register success") - return \ No newline at end of file diff --git a/code/handler/RelativesHandler.py b/code/handler/RelativesHandler.py new file mode 100644 index 0000000..afd3afc --- /dev/null +++ b/code/handler/RelativesHandler.py @@ -0,0 +1,101 @@ +# -*- coding: utf-8 -*- +'''Yeqin Zheng, 09/07/2014''' +import tornado.ioloop +import tornado.web +import tornado.httpserver +from tornado.escape import * +import json + +''' Add a relation between two users. Succeed with "1" returned, else with "0". ''' + +class AddrelativesHandler(tornado.web.RequestHandler): + def get(self): + self.write("

AddrelativesHandler

") + + def post(self): + content =self.request.body + #content = '{"u_name":"test1","r_name":"test5","info":"i am",'kind':}' + j = json.loads(content) + row = self.application.dbapi.getRelationByUsername(j['u_name'], j['r_name']) + if row == 0: + #self.application.dbapi.addRelationByUsername(j['u_name'], j['r_name']) + self.application.dbapi.addtempRelationByUsername(j['u_name'], j['r_name'],j['kind']) + #push data + cid = self.application.dbapi.getUserByUserName(j['r_name'])['cid'] + pushdata = {} + datainside = {} + pushdata['type'] = "invite" + datainside['user'] = j['u_name'] + datainside['info'] = j['info'] + pushdata['data'] = datainside + self.application.push.pushToSingle(cid,pushdata) + add_message = {'state': 1} + print "add relative success" + else: + add_message = {'state': 0} + print "two already has relative relation" + self.write(add_message) + return + +class CheckrelativesHandler(tornado.web.RequestHandler): + def get(self): + self.write("

CheckrelativesHandler

") + + def post(self): + #content =self.request.body + content = '{"username":"test1"}' + j = json.loads(content) + userid=self.application.dbapi.getUserByUserName(j['username'])["id"] + re=self.application.dbapi.CheckRelationbyId(userid) + if re!=(): + relatives=[] + for row in re: + info=self.application.dbapi.getUsermassegeByUserId(row["cid"]) + info['kind'] = row['kind'] + #relatives.append('{"info":'+str(info)+',"avatar":'+self.application.util.getAvatarbyUid(info['id'])+'}') + relatives.append(info) + data={'state':1,'ralatives':relatives} + print data + else: + data={'state':1,'relatives':'[]'} + self.write(json_encode(data)) + +'''Yeqin Zheng, 09/07/2014''' +''' Delete a relation between two users. Succeed with "1" returned, else with "0". ''' +class DeleterelativesHandler(tornado.web.RequestHandler): + def get(self): + self.write("

DeleterelativesHandler

") + + def post(self): + content =self.request.body + #content = '{"username1":"ooo","username2":"11oo"}' + j = json.loads(content) + row = self.application.dbapi.getRelationByUsername(j['username1'],j['username2']) + if row == 0 : + delete_message = {'state': 0} + print "two has no relations" + else : + self.application.dbapi.deleteRelationByUsername(j['username1'],j['username2']) + print "delete relations success" + delete_message = {'state': 1} + + self.write(delete_message) + return + +class AgreerelativesHandler(tornado.web.RequestHandler): + def get(self): + self.write("

AgreerelativesHandler

") + + def post(self): + content =self.request.body + #content = '{"u_name":"ooo","c_name":"11oo","kind": ,"agree":1(1同意,0不同意)}' + j = json.loads(content) + if(j['agree'] == 1):#删除temprelation,添加relation,返回状态1,推送数据到uid + self.application.dbapi.deletetemprelation(uid,cid) + self.application.dbapi.addrelation(uid,cid,j['kind']) + state = {'state':1} + else:#删除temprelaiton + self.application.dbapi.deletetemprelation(uid,cid) + state = {'state':1} + self.write(json_encode(state)) + return \ No newline at end of file diff --git a/code/handler/SendsupportHandler.py b/code/handler/SendsupportHandler.py deleted file mode 100644 index 65eb9d5..0000000 --- a/code/handler/SendsupportHandler.py +++ /dev/null @@ -1,15 +0,0 @@ -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json - -class SendsupportHandler(tornado.web.RequestHandler): - def get(self): - self.write("

SendsupportHandler

") - - def post(self): - #content =self.request.body - content='{"username":"Anton","eid":4,"message":{"content":"TestContent"}}' - jobj=json.loads(content) - result=self.application.dbapi.addSupportByEventIdAndUserName(jobj["eid"],jobj["username"],jobj["message"]) - self.write(str(result)+str(self.application.dbapi.getEventByEventId(jobj["eid"]))) \ No newline at end of file diff --git a/code/handler/SupportmessageHandler.py b/code/handler/SupportmessageHandler.py deleted file mode 100644 index 8f800d1..0000000 --- a/code/handler/SupportmessageHandler.py +++ /dev/null @@ -1,35 +0,0 @@ -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json - -class SupportmessageHandler(tornado.web.RequestHandler): - def get(self): - self.write("

SupportmessageHandler

") - - def post(self): - #content =self.request.body - content = '{"username": "ooo","eventid": 3,"assist": "ssssssssssssssss"}' - j = json.loads(content) - us = self.application.dbapi.getUserByUserName(j['username']) - if(us is None): - self.write("{'state':1}") - print "username not exist" - return - print us["id"] - - event = self.application.dbapi.getEventByEventId(j['eventid']) - if(event is None): - self.write("{'state':2}") - print "event not exist" - return - if (event['state']==1): - self.write("{'state':3}") - print "event is end" - return - if(us["id"]==event["usrid"]): - self.application.dbapi.supportmessageinsert(j) - self.write("{'state':4}") - print "insert success" - return - return diff --git a/code/handler/ThirdPartHandlers.py b/code/handler/ThirdPartHandlers.py index 19233f8..9aec377 100644 --- a/code/handler/ThirdPartHandlers.py +++ b/code/handler/ThirdPartHandlers.py @@ -1,5 +1,5 @@ # coding: utf-8 -# Filename: ThirdPartHandlers.py +# Filename: handlers.py __author__ = 'Administrator' import tornado.web @@ -54,6 +54,7 @@ def post(self): # 其他用户不允许第一个符号是星号。一般的用户名只允许出现字母,数字,空格,和下划线。 # 首先检查是否已经注册过 record = self.application.dbapi.getUserByUserName(username) + isNewUser = "false" if record == None: # 如果用户不存在,则新建用户并且插入数据库 # 新建用户时的参数参考dbapi的代码 @@ -65,21 +66,24 @@ def post(self): "password": "", "cardid": 0, "realname": "", - "sex": "", + "sex": 0, "age": 0, "address": "", "illness": ""} self.application.dbapi.register(newUser) # 再次取用户记录,因为需要获取uid,而uid是系统自动分配的 record = self.application.dbapi.getUserByUserName(username) + isNewUser = "true" # 现在新用户与老用户到了同一状态 # 现在我们认为用户已经登录成功了,需要更新用户的状态为已登录 # 这一部分可以参考正常的loginhandler uid = record["id"] self.application.dbapi.updateUserstate(uid, 1) # 登录状态为数字1 # 返回登录成功的返回值 - self.write("{\"state\":3}") # 3表示登录成功 + returnValue = "{'state':3," + "'isNewUser':" + isNewUser + "}"; + self.write(returnValue) # 3表示登录成功 print("third party login succeed") + print("return: " + returnValue) return # 在第三方登录成功之后,第三方用户状态就与本地用户相同了。这里的登出过程也几乎没有区别 @@ -92,7 +96,8 @@ def post(self): # 这里用到了username。按照我的预想,是不需要username的。但是第一版可以简单设计。 # 这需要我修改几处anroid代码 # 其他人采用json格式传输数据。我这里并没有采用,而是直接使用参数传递。 - username = self.get_argument("username") + username = "*" + self.get_argument("platform") + self.get_argument("uid") + print("username: " + username) # 因为假设所有的特权操作都经过了检查,因此不必考虑用户不存在的情况 record = self.application.dbapi.getUserByUserName(username) uid = record["id"] @@ -132,3 +137,22 @@ def post(self): self.application.dbapi.cancelUser(uid) # 用户已删除,这是返回登录成功的返回值,暗示了用户已删除 self.write("{\"state\":3}") + +class ThirdPartyFillUserInfoHandler(tornado.web.RequestHandler): + def post(self): + username = "*" + self.get_argument("platform") + self.get_argument("uid") + newUserInfo = { + "sex": self.get_argument("sex"), + "address": self.get_argument("address") + } + user = self.application.dbapi.getUserByUserName(username) + if(user is None): + self.write("{'state':1}") + print "username not exist" + return + print("username: " + username) + print("sex: " + newUserInfo["sex"]) + print("address: " + newUserInfo["address"]) + result = self.application.dbapi.updateUserinfo(user['id'], newUserInfo) + self.write("{'result':"+ str(result)+"}") + print("UpdateUserInfo success") \ No newline at end of file diff --git a/code/handler/UpdateCid.py b/code/handler/UpdateCid.py deleted file mode 100644 index 66a630e..0000000 --- a/code/handler/UpdateCid.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json - -class UpdateCid(tornado.web.RequestHandler): - def get(self): - self.write("

UpdateCid

") - - def post(self): - #content =self.request.body - content = '{"username":"test1","cid":"dasdada"}' - j = json.loads(content) - user = self.application.dbapi.getUserByUserName(j['username']) - if(user is None): - self.write("{'state':2}") - print "username not exist" - return - self.application.dbapi.UpdateCidByuid(j['cid'],user['id']) - self.write("{'state':1}") - print("Login success") - return \ No newline at end of file diff --git a/code/handler/UpdateUserInfoHandler.py b/code/handler/UpdateUserInfoHandler.py deleted file mode 100644 index 625df04..0000000 --- a/code/handler/UpdateUserInfoHandler.py +++ /dev/null @@ -1,23 +0,0 @@ -# -*- coding: utf-8 -*- -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json - -class UpdateUserInfoHandler(tornado.web.RequestHandler): - def get(self): - self.write("

UpdateUserInfoHandler

") - - def post(self): - #content =self.request.body - content = '{"username":"dasda1","changemessage":{"age":15,"illness":"我是小啊小苹果"}}' - j = json.loads(content) - user = self.application.dbapi.getUserByUserName(j['username']) - if(user is None): - self.write("{'state':1}") - print "username not exist" - return - result = self.application.dbapi.updateUserinfo(user['id'],j['changemessage']) - self.write("{'result':"+ str(result)+"}") - print("UpdateUserInfo success") - return \ No newline at end of file diff --git a/code/handler/UserHandler.py b/code/handler/UserHandler.py new file mode 100644 index 0000000..0899fcd --- /dev/null +++ b/code/handler/UserHandler.py @@ -0,0 +1,184 @@ +# -*- coding: utf-8 -*- +import tornado.ioloop +import tornado.web +import tornado.httpserver +from tornado.escape import * +import json,os,base64 + +class RegisterHandler(tornado.web.RequestHandler): + def get(self): + self.write("

RegisterHandler

") + + def post(self): + content =self.request.body + #content = '{"username": "test1","password": "1","kind": 1, "cardid":"test" ,"realname":"1","sex":1,"age":1, "address":"1","illness":"1"}' + j = json.loads(content) + if(self.application.dbapi.getUserByUserName(j['username']) is not None): + self.write("{'state':1}") + print "username exist" + return + if(self.application.dbapi.getInfoBycardid(j['cardid']) is not None): + self.write("{'state':2}") + print "cardid exist" + return + self.application.dbapi.register(j) + + if('file' in j): + self.application.util.setAvatar(j['username'],j['file'],self.application.dbapi) + else: + avatar=open(os.path.abspath('./static/avatar/default.png'),"rb"); + filestring=base64.standard_b64encode(avatar.read()) + self.application.util.setAvatar(j['username'],filestring,self.application.dbapi) + + self.write("{'state':3}") + print("Register success") + return + +class LoginHandler(tornado.web.RequestHandler): + def get(self): + self.write("

LoginHandler

") + + def post(self): + content = self.request.body + #content = '{"username":"12","password":"1","latitude":23.000000,"longitude":23.000000}' + j = json.loads(content) + if(j['username'].strip()=='' ): + self.write("{'state':1}") + print "username is null" + return + + user = self.application.dbapi.getUserByUserName(j['username']) + if(user is None): + self.write("{'state':1}") + print "username not exist" + return + if(user["password"]!= j['password']): + self.write("{'state':2}") + print "passwd incorrect" + return + if("latitude" in j): + self.application.dbapi.updateUseLBS(j['latitude'],j['longitude'],user['id']) + self.application.dbapi.updateUserstate(user['id'],1) + result = {} + result['state'] = 3 + result['userid'] = user['id'] + self.write(json_encode(result)) + print("Login success") + #print self.application.util.getAvatar("12",self.application.dbapi) + return + +class UpdateCid(tornado.web.RequestHandler): + def get(self): + self.write("

UpdateCid

") + + def post(self): + content = self.request.body + j = json.loads(content) + user = self.application.dbapi.getUserByUserName(j['username']) + if(user is None): + self.write("{'state':2}") + print "username not exist" + return + self.application.dbapi.UpdateCidByuid(j['cid'],user['id']) + self.write("{'state':1}") + print("Login success") + return + +class LogoutHandler(tornado.web.RequestHandler): + def get(self): + self.write("

LogoutHandler

") + + def post(self): + content =self.request.body + #content = '{"username":"11oo"}' + j = json.loads(content) + uid = self.application.dbapi.getUserByUserName(j['username'])['id'] + self.application.dbapi.updateUserstate(uid,0) + self.write("{'state':1}") + print("Logout success") + return + +class AuthenHandler(tornado.web.RequestHandler): + def get(self): + self.write("

AuthenHandler

") + + def post(self): + #self.write("AuthenHandler") + eid = 1 + result = len(self.application.dbapi.getHelpersCidbyEid(eid)) + print result + self.write(str(result)) + return + + +class CancelHandler(tornado.web.RequestHandler): + def get(self): + self.write("

CancelHandler

") + + def post(self): + content = self.request.body + #content = '{"username":"test","password":"test"}' + j = json.loads(content) + if(j['username'].strip()=='' ): + self.write("{'state':1}") + print "username is null" + return + user = self.application.dbapi.getUserByUserName(j['username']) + if(user is None): + self.write("{'state':1}") + print "username not exist,can not cancel" + return + if(user["password"]!= j['password']): + self.write("{'state':2}") + print "passwd incorrect,can not cancel" + return + self.application.dbapi.cancelUser(user['id']) + self.write("{'state':3}") + print("cancel success") + return + +class SearchHandler(tornado.web.RequestHandler): + def get(self): + self.write("

SearchHandler

") + + def post(self): + content =self.request.body + #content = '{"searchtype":"2","fromage":"20","endage":"30"}' + j = json.loads(content) + if(j['searchtype'] == "exactSearch"): + user = self.application.dbapi.getUserByUserName(j['username']) + if(user is not None): + user = [] + username = {} + username['username'] = user['name'] + user.append(username) + result ={} + result['state'] = 1 + result['users'] = user + else: + result = {'state': 0} + elif(j['searchtype'] == "keywordSearch"): + result = self.application.dbapi.searchUserbySexAgeKind(j) + else: + result = self.application.dbapi.getUserAround(j['longitude'],j['latitude'],5) + print result + self.write(json_encode(result)) + print("Login success") + return + +class GetAvatarHandler(tornado.web.RequestHandler): + def get(self): + self.write("

CancelHandler

") + + def post(self): + content =self.request.body + print content + #content = '{"uid":"test","username":"testname"}' + j = json.loads(content) + result = {} + if('uid' in j): + result['avatar'] = self.application.util.getAvatarbyUid(j['uid']) + else: + result['avatar'] = self.application.util.getAvatarbyUid(j['username'],self.application.dbapi) + self.write(json_encode(result)) + return \ No newline at end of file diff --git a/code/handler/UserInfoHandler.py b/code/handler/UserInfoHandler.py new file mode 100644 index 0000000..7aa44e1 --- /dev/null +++ b/code/handler/UserInfoHandler.py @@ -0,0 +1,43 @@ +# -*- coding: utf-8 -*- +import tornado.ioloop +import tornado.web +import tornado.httpserver +from tornado.escape import * +import json + +class UpdateUserInfoHandler(tornado.web.RequestHandler): + def get(self): + self.write("

UpdateUserInfoHandler

") + + def post(self): + content =self.request.body + #content = '{"username":"dasda1","changemessage":{"age":15,"illness":"我是小啊小苹果"}}' + j = json.loads(content) + user = self.application.dbapi.getUserByUserName(j['username']) + if(user is None): + self.write("{'state':1}") + print "username not exist" + return + result = self.application.dbapi.updateUserinfo(user['id'],j['changemessage']) + self.write("{'result':"+ json_encode(result)+"}") + print("UpdateUserInfo success") + return + +class GetUserInfoHandler(tornado.web.RequestHandler): + def get(self): + self.write("

GetUserInfoHandler

") + + def post(self): + content =self.request.body + #content = '{"username":"test1"}' + j = json.loads(content) + user = self.application.dbapi.getUserByUserName(j['username']) + if(user is None): + self.write("{'state':1}") + print "username not exist" + return + result = self.application.dbapi.getUsermassegeByUserId(user['id']) + print result + self.write("{'result':"+ json_encode(result)+"}") + print("GetUserInfo success") + return \ No newline at end of file diff --git a/code/handler/__init__.py b/code/handler/__init__.py index 64c745c..f306a73 100644 --- a/code/handler/__init__.py +++ b/code/handler/__init__.py @@ -1,23 +1,9 @@ -__all__ = ["RegisterHandler", - "LoginHandler", - "AuthenHandler", - "LogoutHandler", - "CancelHandler", - "CheckrelativesHandler", - "DeleterelativesHandler", - "AddrelativesHandler", +__all__ = [ + "UserHandler", + "RelativesHandler", "HistoryHandler", - "HelpmessageHandler", - "SupportmessageHandler", - "FinishHandler", - "GivecreditHandler", - "AddaidHandler", - "SendsupportHandler", - "QuitaidHandler", "EventHandler", - "UpdateCid", - "UpdateUserInfoHandler", - "startFollowHandler", - "cancelFollowHandler", + "UserInfoHandler", + "FollowHandler", "GetArroundEvent", "ThirdPartHandlers"] diff --git a/code/handler/cancelFollowHandler.py b/code/handler/cancelFollowHandler.py deleted file mode 100644 index f98c91f..0000000 --- a/code/handler/cancelFollowHandler.py +++ /dev/null @@ -1,27 +0,0 @@ -# -*- coding: utf-8 -*- -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json - -class cancelFollowHandler(tornado.web.RequestHandler): - def get(self): - self.write("

cancelFollowHandler

") - - def post(self): - content='{"eid":2,"name":"ooo"}' - j=json.loads(content) - user=self.application.dbapi.getUserByUserName(j['name'])["id"] - if(user): - if(self.application.dbapi.getFollow(user["id"],j['eid'])): - self.application.dbapi.delectFollow(user["id"],j['eid']) - data=[{'state':1},{'desc':"delete follow success"}]#delete follow success - result=json.dumps(data) - else: - data=[{'state':3},{'desc':"have no follow"}]#have no follow - result=json.dumps(data) - else: - data=[{'state':2},{'desc':"user no exist"}]#user no exist - result=json.dumps(data) - #return result - diff --git a/code/handler/startFollowHandler.py b/code/handler/startFollowHandler.py deleted file mode 100644 index 8d2b56a..0000000 --- a/code/handler/startFollowHandler.py +++ /dev/null @@ -1,26 +0,0 @@ -# -*- coding: utf-8 -*- -import tornado.ioloop -import tornado.web -import tornado.httpserver -import json - -class startFollowHandler(tornado.web.RequestHandler): - def get(self): - self.write("

startFollowHandler

") - - def post(self): - content='{"eid":2,"name":"ooo"}' - j=json.loads(content) - user=self.application.dbapi.getUserByUserName(j['name'])["id"] - if(user): - if(self.application.dbapi.getFollow(user["id"],j['eid'])): - data=[{'state':3},{'desc':"have been followed"}]#have been followed - result=json.dumps(data) - else: - self.application.dbapi.insertFollow(user["id"],j['eid']) - data=[{'state':1},{'desc':"start follow success"}]#start follow success - result=json.dumps(data) - else: - data=[{'state':2},{'desc':"user no exist"}]#user no exist - result=json.dumps(data) - #return result diff --git a/code/main.py b/code/main.py index bc1d943..36636be 100644 --- a/code/main.py +++ b/code/main.py @@ -17,31 +17,42 @@ def __init__(self): "debug": True } handlers=[(r"/",IndexHandler), - (r"/api/login",LoginHandler.LoginHandler), - (r"/api/register",RegisterHandler.RegisterHandler), - (r"/api/userauthentication",AuthenHandler.AuthenHandler), - (r"/api/logout",LogoutHandler.LogoutHandler), - (r"/api/cancel",CancelHandler.CancelHandler), - (r"/api/checkrelatives",CheckrelativesHandler.CheckrelativesHandler), - (r"/api/deleterelatives",DeleterelativesHandler.DeleterelativesHandler), - (r"/api/addrelatives",AddrelativesHandler.AddrelativesHandler), + (r"/api/login",UserHandler.LoginHandler), + (r"/api/register",UserHandler.RegisterHandler), + (r"/api/userauthentication",UserHandler.AuthenHandler), + (r"/api/logout",UserHandler.LogoutHandler), + (r"/api/cancel",UserHandler.CancelHandler), + (r"/api/updatecid",UserHandler.UpdateCid), + (r"/api/search",UserHandler.SearchHandler), + (r"/api/getavatar",UserHandler.GetAvatarHandler), + + (r"/api/checkrelatives",RelativesHandler.CheckrelativesHandler), + (r"/api/deleterelatives",RelativesHandler.DeleterelativesHandler), + (r"/api/addrelatives",RelativesHandler.AddrelativesHandler), + (r"/api/history",HistoryHandler.HistoryHandler), - (r"/api/helpmessage",HelpmessageHandler.HelpmessageHandler), - (r"/api/supportmessage",SupportmessageHandler.SupportmessageHandler), - (r"/api/finish",FinishHandler.FinishHandler), - (r"/api/givecredit",GivecreditHandler.GivecreditHandler), - (r"/api/addaid",AddaidHandler.AddaidHandler), - (r"/api/sendsupport",SendsupportHandler.SendsupportHandler), - (r"/api/quitaid",QuitaidHandler.QuitaidHandler), + + (r"/api/helpmessage",EventHandler.HelpmessageHandler), + (r"/api/supportmessage",EventHandler.SupportmessageHandler), + (r"/api/finish",EventHandler.FinishHandler), + (r"/api/givecredit",EventHandler.GivecreditHandler), + (r"/api/addaid",EventHandler.AddaidHandler), + (r"/api/sendsupport",EventHandler.SendsupportHandler), + (r"/api/quitaid",EventHandler.QuitaidHandler), (r"/api/event",EventHandler.EventHandler), - (r"/api/updatecid",UpdateCid.UpdateCid), - (r"/api/updateuserinfo",UpdateUserInfoHandler.UpdateUserInfoHandler), + + (r"/api/getuserinfo",UserInfoHandler.GetUserInfoHandler), + (r"/api/updateuserinfo",UserInfoHandler.UpdateUserInfoHandler), + (r"/api/getAround",GetArroundEvent.GetArroundEvent), - (r"/api/startfollow",startFollowHandler.startFollowHandler), - (r"/api/cancelfollow",cancelFollowHandler.cancelFollowHandler), - (r"/api/thirdpartlogin",ThirdPartHandlers.ThirdPartyLoginHandler), - (r"/api/thirdpartlogout",ThirdPartHandlers.ThirdPartyLogoutHandler), - (r"/api/thirdpartremove",ThirdPartHandlers.ThirdPartyRemoveAccountHandler)] + + (r"/api/startfollow",FollowHandler.startFollowHandler), + (r"/api/cancelfollow",FollowHandler.cancelFollowHandler), + + (r"/api/thirdpartylogin",ThirdPartHandlers.ThirdPartyLoginHandler), + (r"/api/thirdpartylogout",ThirdPartHandlers.ThirdPartyLogoutHandler), + (r"/api/thirdpartyremove",ThirdPartHandlers.ThirdPartyRemoveAccountHandler), + (r"/api/thirdpartyfilluserinfo",ThirdPartHandlers.ThirdPartyFillUserInfoHandler)] tornado.web.Application.__init__(self,handlers,**settings) self.dbapi=dbapi.dbapi() self.util=util.util() diff --git a/code/static/avatar/1.png b/code/static/avatar/1.png index 5a3c1c1a31c25e423a3094eb9fa3f73ab6cdd0f6..03de2231ca8e2fd63f4fe8e24e375bb613b5ad40 100644 GIT binary patch literal 48120 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
qQ)ehSY2X37Xu1yH>|k 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 A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# ztB(emU8ueu6j%E7+>pQaKJ~AgfHdZmyW>r9uArko!6o4L3wZy+3B~+Pam8uTRQGDU z4>Y$tFdK8c%e<}P2aF9L4gx6FMNANR^gz1Wzp zY83Id#Y`DISJ^@GdY{T4UP{$b_8ACMKeXUe{F>To=#J-*c| zA9MZQf6z5oSGG!6?u-B9^6@YSO6yAzP<8nN{*6v#KF%Xwu(p=9+c;L*!&bFiu4a}6 zHHdGFoc6Yr;gV@rJJ!AedYOAL>{Pm?{ZH9L;0M>^irc>#+a}kd8E=6@x5b%k7axwa zd+yss)A#-cZ^H}a4SZAA`nM*JNP;!=ky{_L_px~J$l@N|pNJ&z^ZAdy9i_$d77V>28kTL^e<>9tX;$7>)`Yb#iY<(`V z9p^oa2u3dg9_MRP8UHEV3RIhFdW!ygs<20Mc)eRTHgCg5@MTHKw28&I_@Z|uFqUNZ zcG2_%-c^o)z6hW`r6_zWNs5KEL}CN`eSJKD`!AeIn~XB1Dik%U=3+@Rt`4#l5*mA2Uy%eKxoeHbKGf&WDABIfn! zf~4B*_e;vdO232vPXPV<6MCe-@mS+ko+wyP$V7Fbb#QjeSah_nI=thvbP64St| zuGK@oa;86<^{FP3t}ToV-n=dfEc)!_Gbdk~^n2Mf_8RgM?)eC2y!)DPR|yM1S{(}w z!9j+B8QU2fS!tR1Z%`>%`U5b{q|uL1^otqi;kr~jTiWCA7h6b;lHGcG|JK0Ou?bAc zfW2EKBQTSb+;)r%eRW6zwmmf@K@rs-w&akF5ANE>T5PwLum#SBh6VPl>cjJ(ZwPa8 z;fLJpdGP276)bBVYQNLWri5Klvc8x0OO#V=#9y9@Iq=dX@X#vx2~#Zt2KrH7j(gQ_ z&TWEY!}{IjkXBtufO~ZDKOGo?(yNFh(y^{=MTSkXgVYYZrf)S*r>?CmjJgbCj9y>~ z<`v60M~)G2KLbI*JBqMo_L%eoJMcvufr>eH zpKNCyn<2zM-^3y_Q@5PzMu8rTecCn+x*V-SV|J0PPOhwC)B|Qsfmns^*-mv_PP`o+ zLGEg9OEB>!^fPQDeiE#6m>6#EXhunlS_kcd=|n~+E2lca8TU@f7zu^>X&5T2_avCE zx&lcjsjct*(FJ9H<;K!|u3r=tX4+Exx=_@r=i>K30j=$V^9($b0WhW<+fJs`mWCYu zfn{@`MThzMyPo5Z(S`dCMC0R!95vL)H+2Ja+w3(7qDv@NA12fS3$W=W?kbk~l3)Ts zh+`L9k-x`;VAE=ZwZ%_&``$48Z}>@K<{^Kjs7 zdsfPp1Njd(?y5s(F^wfICtuHl;@lPcmWbrv55S8q<))#O1!|`g)`5hFW}BEK@@aG($b*@$mHcIX2g6Y?fAgZU;OK5$nSu zQl{rgFVl&kE_6ee<2YjGk#Ev}RxsyEm<6yHaky^v_|N2LXpjHZ=l<<+S9B)TsW(s9 z!276Q`#{UD$nI~?UAtmHz5$(w@tx4Ly@rFfouuYtPU#-hKJrpl^(S6+^5Fp~v&zb@ z?>6$oL*j~TGq?L(*?EbFlYy@Fe|wJny#pJ3`WsNPosD>nvc6w(HB1mDU;kLDvQEx+ zT`I?NMLp7W4%Cfz%H%Qp((RXMKWyeRV)hz&lqZB*h2p^4devLCb5^@iufe0=#*sBh z6e)e(ZlO*LK(|0)0~^UWrhb^!X<=Xm%_-fehX(**9WB|D)A(dX*ARzx?hg}KhH6Nu8?c`lVZxDmPzY?J5K1p@I;{D;Ods8VnGteclW2_{YabC)rf zdVyu@2+BHU-reiCeNQhgk@c&vfHrR4?Soh|ViH~zr-^H#leL-d&+m3^_JF#Q#s2T` zWuLZwS9R@0wRFgicHu?bc)1(55%-iuoowIZCh(Tn+&U1vHDwD^p;=;r@&0x}V7;*4 z8w=ugfPf4;_{bwu;QCa;dE)1xbx1F+KKAdi$kG8WF3aer(tR!#j1V0xVTU(mGTVX^ zmz+m)dzX`Yw!xooJ7+b!;h*#z(?os@oweK12R`YWMIFl|ePf?SBEImO zYZ4l*!CRni=iN!1_PP@CmnO&Py285y@CScX)!I#F;PnjP1mp8kN~KC&Xr;`iJ%^`H z8SB|~)2S2;NBj|J13WFYOF!kKJb117!PS-FSPhS*+;jIB$Z%s=Gcwj>8jE87N5u)s zmvCf3^(5isn^CI^PZ#$3Ph7?L_l-B0-mL=$O5Bd>`$BP+K4X z+@f2Iq1k;siI|RnJ_T04{*gAF6nsI}d`|3{jRC&=YCk5vre6Vr7l1b>?R%py zG={JJ0s6YPh%aE;*Awa87~s{9@f`$+0DUb1#;pJ^UjH5kRK8wC4okisN$)2BFSmE^ zfEU0)!q@&@4X8Mw>zWquV#NDZa32BqBE8%H`my!lH~%Hz|M>C+FZ??3g|7K=1Q-FL zfAVNIyzOBgzOsA>5jr1o=4~;gdmMk(wu;=_d=|+I6jbvp){=SrtYL9lB?q@uJwEw@ z_3d+4zKgul1KWGTZpzYd`=o2`{?>E@$a{l$4i|x-i>AW^lp3vcy zCXgapJF$}b_qyI|PB=Tw@1QpuckflO|Cmdo|C`e*|8yF(Wc8{n4AfEv-XARd>J1bO ztMGz%`O+0(PPiTlj@Mtt1{T-z5?yo2S~n;RJ8SX1**5=5Apzz(^Q4Z$7t=67EzF-x z-g$@{m{OVAGhy`m(MCgms2p8~stfp;^YKwyR`7kBv&S5m!DZX3qq8epzxIsW8b8-$ z;8NVQNGQ!~kKD42&z$S2%0tlW!0eyt4|+c(9WmRGzB6be+TY@)2;b8Qs<>NF zo7Q$AX}xqD-mjAx8VLeVPtgzW&qKYPElEiVP9Lwt^m(_VQ^0MV?yab6z%3WAT6C?5 zP3PNX!>8BbBFkKX-;qi4azu7Dl14te7&oVz=zWsla~e8 z&VYX0XMjH1n)0gZrO87Mi}C$~h4ZH~ajvj7e2!6V5E$Oh*ZnqM?_{k*99(1KPk6d{~QBOU(%J^6= zd&t2h)IyS?w)MkLK{@7O+62~tBKJ(Y)Kt0Pq`3u!VfB@2jB8x1|&__X@$&tcTqE!@$$d9lnsy*yLHz ztUlQtr^yLL!zJ%N==I!Xwy!^u_C?C&_RU1FTPT_k58m0`2^IKu;rwh(JCE*FGEfFH zH)c~grzmRS%V^7f@asEX@GJzWxwlUd1;uy8`>9IA1c@vo{N}uXMAKvOF7lN{=&2J& zneF4?u)G_Y?R{XF!?LCp)vdGi1)3I>gGVt@V)G7S)fQ1=?+P4&rIO6XanR^B%z>tz zr2Tqa(2CxEhbz{;RNXGhSDYSZvjbi+Q(fZCMaXoe^CRBzp|?CV^X*>Dr8L@){ToyT zgPt(Eh!>L&V-{xg$HD=2(mtH7vj#dzWgQZ7%~%N!4SXBBv8Hs**cal_s1r04jSl0& zT9Uc@EIQ<9u_PlH)vI32t~oU30{gJbiJbk1F-P9dK&;xpw(so&I}kNSwZX?AEwgtK z0Nev9mgWG>U0^@j>VQ6Sj*-J)JSnERh~CKc>d;4pUE>pJ#>f@zrO9UlVdMJ*q48^r z;`%*HO(R&Eq3IaF81V{PHG3Iw1%tRvFGU)LS4o*hng`z5J|7D{2iEUuzVMpGMF!_M z7Efq?MZsEH@)*mB*%H&7mZCZkl$U>vf}l97v?x|VK8aJVbw|OD*SGeimK-)Aik{?Y~a60`9i#*r|9#C_d848?w8n7Xl=zM z+@!=Su+~53NAnMet{NItSSuA}MJ41YT)_cJr>6<}dl2TnZ@+iE$v1|Gr`kzmTArke zyBJg%x04*tfhY|8WXKsl7P{RO^5vHGlk0O9>eI}4RM%v8l}CB=k+gRQ?VFUoDX8LW zIpoeyX#W~Ei=zhJ-t4)GXC0Dm4#Kl1wU1u^(XT(@;rzKt5)&j82&Sb?INYCPbwni@ zu4+dks;iUsGK93nQvI!_GJMyLV8!3#a{UJaNSN(h*!xYobIw`FK;Mi5EmhOR$ORTH zZLL_K1Ha6~C9=&e^b1!WrnXJ;k=yDY^Io0t>E8*(u!V~0tSGasr;-Gdr=bNWq<2x;37YOc(3S$nT&p^aLajhLqb6_WaPUI6R z=j+ML{|z0Gp!|9M1-yy`-91WiO3WMg`u68|Sl3*%8J_JM%ruh=@><+1`IYKe%WgqjMpgCkLRU&3gY)*3X$*C^}hC}{&JMtXc; zx@1HVD+LU-i3uHQg5*zYPC4k|Uk6wrrUjzdo$nM|Q_xvxj*~QZu2+JIW{1Iy49qRq zzkTQ|biFBOl8v{;$iAm`=gr5B)_4v(t#JRVUx)eP()-im zN(r^rzSH+an*%y1pIsnJw39Zc#!_j$C)oNB2?^^ME29-9~Hb z#Yeuzhhf8Q7`e5N&;a6DnyL%gfrr^}(i}W~ad$-Fy9Ox!2AjvZ8mAAeqg)y}Xku*L zvoM^Er<+YAtS#0#&@9h3-jni}3J~XP+=@&{f87C$PiempchXLJBWyDL4+h`+QeK?$ zaQ9{MQd$WiGi`_2;IeAh#ApgEZ1oEU2m>a_IJ)sKil<;D&f&XC{I*u$a&cUe~!Z6s^1-UnmXMdS*tFGFSzNuu6QmI+8Ut z0CrmT73FqGqJU+4n}%mXMrx+RM}{VQshs5D%I0 z9CMgsyJ%^+kSRh>^d#@`=)9NL;WQ+a-yMXZQGbw@*8Jh>q)9CL0? zW^xQRfW`b_oABGxFKql^D1f*iD@v3n^W@W=w3Cc{*^Zj(7w;T_oeE7=2KUyUZvxQTC zDl8Xv$jDU^uy$1=pBd;1nS!E58c#Y>*Cf&DS_*&qd^;31&yTWU+o+NPc3=4T#F%N$HX@rb-2%^hq43ds5qK}?>O2inQ^U*;q z5=WMJVNUL$Thh4BpMBKZBF*6=5k2RVtJP>wF?;rd?SL}9_q8CQ+vh(yzLc+6P1=)lqlnd3$y+xTNm=sGH7QRf@61p^fOVB zeU^RDm@O+rVyy#~9qhMD6TCvSQ^C9;EiMoKutH!tZau3$>M+fQ_~wl`d0uF^OE4ZP z?~XCC%kq3W>&TZsx3< zpN-~~cCfuqlUp|KUCSX&=wjtBVkksn<~@Cz?#Ugz%Q&J2<#urVLlEFY#9|nCuoBj~ zf3N>4T@u92q(XIM>2#-Gg?Pg=bk3ku5O4PONzmKN6#{<<-Rb5?%1nAW8ujT*w5t{$ z@DzUb10?1b2zNnnurfYTOi%wk&EyvydX%US2Bb7RRUyNR#lH(I#TVQle`yiyF4oc( z=bwlM2K9Xjwi)u9$C0T!^)g&;62LN^#aW@(4J@`C;`8lXjJ^fT;2K8E-f<)`yV?Ec zdnw*e7p`1kUF4a)K%^~^`k<%Vj1iv=U&)(x>FgAAIp~swEQ4720O-!nFIGqNywO>% z;BB?t?3zviccKn7^qS{3;3(%KUV4!rBQ7(sYjTX~orTg0!9m&5lcj3$tSP?y41EQvT8fvC9SygbljepMy=d%R z&d6J~Ur4=`?xq}2O?XZEyW;_H+EEeOh*BEIW7s>;Ur%L=^b;1_J(c2e{2^5g%bmIn zT5n_KNVo>bWIFy}Be{oDFs>pf_uz@Fk&f8hRwTa%DaXjAdOMw$&M>3G>hA182Mo-tPPg9ASeQJ5~~NzxBcN7S5&|pe!YZq8mla6mkz~4+9eYnDa0TN z?@#r~i@8(@H#tN&IkP*i$=MGjaoJiPTaJ)l`4cYY!rF0!8PD`W{Q{*s zw0D7`o7eNUCbySt(F0bho7dh2l7e24`A-JY#3{*M=-H_3BGEp7o%qZR(6X@&_jIP z)^60^UGxsgEv%s>`0KC1of*Q}Ox2e3H>mp1xdyGOWyBVAt)Yu0kGlL;l>M>c~H2- z*yx^7ekS?B{LLM~=orB=AtXX%cjK1{{HoYO*qC$v@MaiMW#IKU9#8avxBvXdkQwm& zHMl{!<)e75Q_pRjJ+H9HUQP#@H474G)`84&hhgMn4|Pu@Fy`LdVZgwW1(hDfPqo{r z&kFOI%!%g=B5zDX`G?`WlunnaCi}P;resvrY^E|RXgDu9D3Ea%sG7huj{PxV4ComM z+x1Y;iPy8}`$}XC>N;W;GJ^I+PH8u}=x-AoN(EBi+51bk+boLl+@ZUvARr zO;EP65vL?v5&e3^`@dp7HlmdUNV;30mMb*}*9!FZgQHy&?ER2ODudNh~*cr;vYnA z6BDjP{wu8*#4_F2r*iUB`b0L!r<3E+)db-rQV<@Vi^<*dn4PE1z`&Z-b_9x``?WBa ztTw8IAqG`c8I~Ah0ATJ!ePhTUY2}qrH6N0ZpmZ>lN6E{v8oN-^*6DXicFR*FQP}4{ zwI>&Zm^)e}dl4x|x_=uWMEO8_%EeW8Jc&5lD#)Le;mah)e4bnoL`f z+f!t4^9s9ie)s3%*EX*k1YW%RfwvJQ+A>Z_Lor02kB+sHvPtImgyu*(Y?v^L406MK zWXKczAi)YzY(DrJ46dbVc$*%fR8>#k%6S-KOGLt*q{jTECz43L+xVbk%{wDmp7A>t z>$tk?x4K64xPSEp_8Mr@Pbt^aKR0AcgsI8*Z;a~0UmMm;JE%6;^%a`_N;o*vuwRF$ zf4e>bd?Y4rLjCur5;4c(Y5bDlHF!{Q()dRdC#e9{Hi5BKYlYNI9g)UTWEG-{qYB1%YJ@fsgg_r72xubAw--0G{&tnpdLM9>o0*^ zSz!k+WS`Id*;Ld|Jy$y0VZmQFx3O{}KsH0iO7cqj9U+w?QPGWcinUERKF#(?&W-~s zKkRi(?Pn#qu2s*;=0?pW3Tdq)Z2^j{al|plusoij)7ymkRP#s6ijt7Tt4Vn&4_jXP z#gPSV?1XwCqrcAs-R-5pY(L2a)yPj9o*uq_boduslMj778bjN=Bs9d=05uM%7BzQR z_k6bsHb`4d=w1En44HxbaPTA&-McuGt{>jJOT%u9`$n8~C=oAT!?V&Xv$0x1YW)m-WjiS7Z&&5WbtRz;9=GxRX80J4R@8V?(UWelf898bdK(=T8 z((prMpF%e?p)SOpgwcg!k#H)7W7`S0NjS4!47SvM)`HvEdQ=oGccQ&~yi*mPah-a~ z_MLJtlE1yA?(Gx`Yl2=mqaNHuK3qs5Oc1h3vW`do>Cj0!jZcBwy+OG*1@}|Q6DExd z$>I8!`DqvwVK<{)eT%DTewk47oPA=Kym{G)+pGiXOzpCNFw;wun{+*K!uipVSvN!G zla-Z8XEhY@#+3Ek;@?qQH`Cu+nGpdF;pFE(PNJ?0#q$1r*!D)uFvoJFbYp|AKPn%smg z8@StV<=Lw%2~js=+`Z(2PjUqwRp zfmX;l3GJq@37?dIOLSO_B1|tTOF7q6yzK8#4swsS|%mkuAY5sTFu=(SS7T zhmMvtKi&ATWTqJJh--UM&}ns|bi7X)`icf^`w|zQe~SLFMr?E^5T$`g+-68=jd_90 zLTh}1-7p>W&B2Av3X&HA&dxMXt<~D6K1wMGQU9)JFuj?w$rV|Q{Crb*)F>-y;6$w> z_*EH|qyoa~3ezgjgZ)e7pmK5&hJ=on+S6UQya8*$d_(7TFPYU6p<0zf8%@0Z%lcGK zyNi5lm_+BqbF#@@v_6fJea=3qX)9XI?#L|wSVq}=HjC8hloWwS4+Zr*DK~5cC!AMZ zCvw4)Kcm~9=)8LH@$i9{s~6r+02!f03^qFI)LlFE(N?LSHmyFA)_vq7y*R=(O4Z~6aY@Vuv<+jpxauHZz z$E%C^!9r9Zo!JI?DK8t1?tWx05f) z|HVJyhe1==Qwj^B!%}; zV_^#Ow1m7AQni`cFQV_!M5F-o?pLy*anyyLJPfP-cx?{!Fef+hbsD^X4eny=a7JMm z*35v?k+(U`PJlh?Er@9UpFkb?o>w?AWV?Ksfp`5nY6b|g4aBtHJ{wPFR@psE5)WVx zU2*CdKIZ7|7GX69Z-0L-V2%JilkPv|$>a}EHl(%21%zd7>^XObtjS$ms5TsHmCvOB4}=-$Y|AD@K?!qbXRV{Wv&>vJnjk~fap$WCTj9aa-*mBSJf zWXyPGt>#)G=$;J*5QN~mks|Ufd1lpcbG?#4T3ICW&=32wsvAXGox-&_cQ6L88R*YY z=kl*ca+t-@%W5T?TF_qyKt)d^M5xn`mq?Fz-yf7hZCuUr-m={Gg~g%BYM2R&QN`QZ z0*zGrNa;cKbu8UHXO7~*@cIA)JK88wuX|Uh3ZOF$0Qm*?C ziF#wI2iIKx>6#@HW~lx1x#8#?Xo9-8f)~6N-j@O8U1rE6RZqC#U_8;8u&L<_@_P*&oo%S~NmB0_N$ug=QL&ba&4E}!Pf?x=Tg6-BQ# zJe}0oN{%pBm(;(Mt2B>9&8$TCP|kt;D6XeU1+@L^(lh|6xRJ!$*72PKUFmT3wU5`Q z7R}3XIuv|h$ZQ&dW4JkH{`vawYrD6L6rB`l**l<|V7>~@9}0+}Qm}}?AbA2WQWjJRRW1hAg2*3`Hesdi zcto&vE*qRfQ^yl9ls5BnncVowHN^e%lv`0onGGdB6+<(;5@wrfXZw-(LU;&tzLYa~ zsF&HvH!sp?qECW9sBMRCOUb_9F|HJz@L5BIF`CF>oW>Qxvp(qe#0=xu91eoB`{&>u z2I8mf3^YMTcRcMI$Jw!FaZw>?#YAkj;QK**=J!pPeHGWcDnnD{8{klRI<7D9dLl$+>KMAWsP^uHGzB6# z(O3>TYj?K{c*G_Hp9)vQQ-;)-@Ii8Vy!mJpvcdh`%9>+$+XSjKscYt5Rsdk0t@dQ8gpn^hIy+ zax$r{Bh<+!N7y!w$=oqS*f5R=Qq;WLvWMGq=-F@cz}x2LDAgZnbipCs`VK!lgPKoh zuumSeWi7p~gXzB=aT&7eJ?sQayjh*s2>!sUR4g0vR?MuzuH196t!#){J^!y}hcrkzZE$*bDny{VkP^peI|GiZ8;jVKMz=QT`(*$b&70i*J5aY3 zf>1V`N09WDR_p6c3L}MtYsx<(x=O0pI{?nea3>+DZ|tl#R$AVWcLasM*cn|N!!&tR z7waaWd(wD$I&>v4aMH~r^6V;JABr{xVy4kulUZIg-QhZ(b4qpZCg`8yYUGY_R2Y+H z@D1ThZ&MU|>(isVYy8Vae7$(RS?l6-g?zdq;o`9g{Vp^RMQ05fut}!gw!dy?FnSMs&BnMQe5D+gX(NcaMcN-=JDEB#W6TAyyDks7C}f8cNMq)}+G=g(ru> zL2mgu?WjjGfyU<~6eUH&0pq6zLUt~b&(4u8~ zIN&AG--y}Y6^CtV|8V|%|E8IAQyGV*j#kS?gW`c%E)$?G2`j3N;Z=`?k^2Y zc9&Uf$#k>{J=(#Q*)<7nB~E5J0ouFa0mGCgo5&*ZEu$~xHcaH5H-0!%J9VgTRou2q z0K1sPWVChIdXMg5&FOpg=CE*X4C!2*HRC?RP#O?xyB<0NULXv6@l6PlVgo{q z|0+fj*fsezX2uqo_WC#ZSuh?td=d2_oAXy5dG#XJH^`}~(imY{qJs`a<@pYF@{;6v z0()Ke;b)?$ZYEqLfVTi7IInVSG&f2Ty+W2FQ2~d*dLc_Nk!m`Aw#*Vy zcfuH}LX@7)|55$-8UR^t*ChVrv|yU{$3eGM9AUI{O{wkO`r7MZX4y#~p$D&rZQCGd zcbd2L7+A!{1@VN4LRr%H``dr%wMpmY@bE%*R*ctrN0@ ze*F=bK2b{aStM5dsq~>lVkD}0a#Aj;dGR9;eb+h~^*<0pwR00f<&I5V*h7zMkXD7i zqZid8{rzm#*5z2Ar{3UV=n!6_wh^Vs`6t)s-hjv;67xBpu3z$xL3bukFkVXFm%{D7 z>5E*(z2}$af2roTTUOYNrqL>;IX0AnesOJsu_%c=8Kg&XM|FG}N4BF}-&v6%hH5iO zWe80NPb@|)dZDn(e4|yksod0fG()Ryp59K0o#E}Jn!y$ZZ|`e_d9<~XqG2L*(uJg| zqCjr;tBlw$>O=x6Jn;d1@qZwMCXL>x^vtYyvdJS<=|y20vgG0NCm0*! z`Z1)XfuBb3?1xV=8b}`TP;8%Y=br@;*&p?I6?czskVJcWA@hrLt)~l9=D=cVJ_x3$ z!1WZ2*ws#Fb$IyVDtS3njgfQLTTmldVigt{O9!E`R+5P=Va;53(KLJPzdeJ`Pa!nE12QQ#+TPc zi_FnGxxYj+r_|LC&SOmB!Iiidv?>Cz=E_Vkf7gQVIF3XIh4y{O;+u zNt8uHhlV*qQSP32o{g+1tYCsKRZye$aBUDI_biKfvZ3XQ)->a?h?? z$*5kwOFrwgOAfyZVqA{@=_M09%poiyl_ zs#4=rpPt`LzQt_(2z7}2Nan=n3+sA`kzkzjb!F-H1{&gs?{2Ky8nGPE9{8jVW5-RN z`uKJu8vKj2=oZU+G4vHz8yvEJorTR{MTQRM!^=7lizmzDYsb_-!}G{04`@KxetsdD^qo`AS*^ z9@V`Tzg%hDFJGmVmzffOwG#RlMWP)43_0rk-qPO5dm|y?AeLL$2Yj@!qTV_{Rnwl# zU(UYgY+po%V?|l^-SzEMmM?N7@1X>`h~fladMDvGH&IJngilppJ(J}Dx27AfL$~B- zRvWw&w-wh>?Mdr*qg|ocni3{_>sd(vY@WOcO1JCT^y0at>hN#u!-QxE@kphL!JVW# z(|=NhIDTD4VU9I4gQRgq?jo2;a&bdLm5(&rXOq!+c^YRKjx>ESf3Hf3**&M-QavX- ziXYfJekG7u=xtC;WRq9+3Aqy6*Bl9Z5ys1E7H z9$sKM{<@FrRpzc6n1ltuMG3 zor?+R^en>jav~b6Ii=MIPwj2a+K8!^RzqeRKw<}H&v30ayqms=6##N#Z&yqw*bP{+ zm1A+VGiy0^zZ@(^ya|`UaceV984=qWHyfiKA(lj;28xr)(c%&&xFe%}D1;47`mz*k zBl0&jhT0h=$s8C5uv7e}k8at3?@VxRsJjVvNxtS7HNzWH!V_`}c6%er3S z0r@|6E(PGTxTzwQJRvtuKTg+20U;ROP5hcykO8mseRbHIP015q*Ugv*0FJX*(zF~EcUZRXp89)3do6@F{E^&v0~ zeo@g!pl~!og^S&uihG;ncA{?P{qFdB#8!QyLRmVEG6i_k5j^|IPbeYw#dx{v>C~@u zv5N`!_SyaDS}6ZTl62la&My4SleDSDFSPuQ&3yQF9!jT#EWtH1J<}r?k&&G566J9j z?W(u9T+Fj1BealhSh`I>(vf}WltV&&b@aVpF~2?2)cWm!Kfw)m1itU?BZ+oE&zCWS zOa57!JFwQzW7apIO=v2@*aO5~Nf>r-+G| z=xA8g{aE&h1VSrDs<(HwXEPKn-bzd5hyvC5x5Xa1zSzHa-c2R3mL@U&etN0h{KbnC z235Mggc7~K@J@cx$u=_$=waU|d1K}xeuk-$Wgk|pLjV&41xbw@56j9ANXmqiff(OB zSQ&375u~*=d3_%UOuw1GBiKPc_y46rS+zRQw!&0;);d^p=BUp*AAWievb|z=f&VYU z$ohn8ae_7<-y&pLGKgaaYj>9_;5QiA6B?9n^);00h|5YrrJp+f*O9B{0ww1Y$AU5i zf!x9N5O#U&LPubo!uk!mkSdQ(wd2U-pH>E6+W!GNLBzfglH1}Gfu@C>n3K)|f^hl) zCLf(dQRW)lzv<53zn<4w9#vWbnUQpm$(vi2v4HNRBTL{#l^a2j@q)@tQw3D!l^a_e zWcm&Mx`MJ;f&X*#w(pU7Q@AZAm62{}e3i!j7x#|f)Ib&bs*|v{DjA2WGtgg>f<1&- zWww4AXpAI8=!Du67;;iAF(If6^`{H-L8Y&kYSR)Gxw$K-$+%&KlJCW7 zrDXlPx}w6vO^r)d$?&v-p<{)&E9!%M&>X>IGhFP54@S4NYb6C^PkaDc;(gJY;D@%P z0CZ<^c}6Jqq|#}nFl0;#A*_Ox`x2nZRMeIjqSkfNEp%o^5Mq%EWPJrO=q-vtUvb>L z1ZV?w893UOkF$rQy=)K0PqgE~t-}QUB|LsKidQdrz2`3R9{zPfrf;inFVeR+US=%) zm~T6-zD_S6Z`L8kVPWUi{oO*Ny{Z0AEit<8ZK?2&!Sa$g5aOHS6>kD1g zj0{C|gJ8R+l8=>Jo8sq*JD8PxvsXNh)GLB-;@LS&K0lAwj|stp!%o=0x}k)?;2#Lh0(ZzEcTCV zDrr!C_2L+RCtcZ-QJgzkheNH|7--Bwe?@(7X_U63CdVqzALc-wRc~?x^u~MO~05Ls9>E zaP=gI<3Ls%_AyN9&teEj7uA!&>oTKA%(BU#5jI=q`v>Qypfb-6gnivn||+K0%R&TjA5gCj(FxO>%=vj9B4#w zN+61P-HZ8WlN;lO{)PhF7(0M718ulC(u+G6hw$Xq7@pl{RPc;Id;KMKj}ov+=fPdN zu?PH2$j#hmhjA}qvRsUqYle>(d1!qd4Jw=Eu()T)c~>~ z-Z1UvOQF>UP2^2ufspQEJ=T9;kiDzG|2Z=K4!y9-=dS~qY&Y>@1XC|ZRnqIt^PM=< zmW4x2nHXx$MR$HIolcl?Vim#sho#$+ys^5-Ks3aK5-9O#;j~Gh7UqWvf5M7xs>GX) zi;@liNsB0OcSgRO6Y^X+b#_uJa&uNaiV`x`GhA$9nA#TWkG*LTIG7iY!9s?3g$X!X zl8nO)RSp%z;y`{34sv>k4r;I@4uhrfI8+>q{lziZR}_tY0!YBNmyqfsq(r?0p18Ko z^bpN~{`bX`SsUvy)A0xp8AJ2yf>O+rltwW4?h@TIDMcFrw`TQ9K*~f_l_Ax zmA%F=Q_m-R_kA_KCnEi`@ivRe^q%Vb=*Kahf0y**Ep`mkZN8EC2QPz9%8QfbnuvRn zoUrlJedub)L0eTi+AA_plfyrT`a%qK*K$4{rRh;9;~!K}Mhu!{n}%HMZ>z?U-Ub}o zSA*jR>-mS;O9wW92UkY$q|w;I`nuFcW{_M2!-$iF*vy>d zrmR>1*<26*4YZewNC>7tHmQvOtAR`&Tl#*2OkcNH!JXf3Vhj_{>Bc5c;n9r)IKHnK zNA~1mxFwI_WD;6ZLQxmxr<_-PM4$p$YeEF}Bu1h+F+#yiUiwiT;)|+4IyPSc*#g7_ zUK+q0)wIyV3FUNaHG$q}4D&||kK36LgznT3?5B%5K&NylKTd&bxGWW;Eab;3QZYn# zbhJDXLlsFlR+WO0>Qprys!UcoT$!XaSV0$6l7It+gqwhmz>?`c0#F>7XfNmcxoj`D z5s2+2{A8+2K-QBNr64Xa>nlsbaCNKdyk4IKS2(qI* zu&2@qFCIkk`de!CcF}tM?dy92GEV2#YWZUZkWEh#Waz=%?4ZhV(LlzqQeGw^k6F-- z8H3F9CL0$L(PD*NWV+v?`Gv?mV( zHR)($2-g%BK*tr#@G%nY@q|}QC>%r*3W*qIS$C1uj9B8gaPgNQAl;+XF#VQw9nVyR7>TH}pmcmdp zPQ939YD%K1#p?C9ukWcNGh;$lxs9bEc7(m(6_Ehc?i<3FFT+vl6g_?#A7|8q)!UM0CJ3^*K3?=;-ZVl?Kt}29WyZahrZ@Q8l5xS-Lt9-^!L;YwRHOBv_O@f(2*LBzRWmur$rM&(P)khK~;#i z%Azm!Vd&`LOn~{Kf~pGiM}1fjU0XO>V#CzSMnsa|B`FVmnK9Ux7l(nO1RSR88Y*YV zNU#i5B;a^;3dRVaQw?c2RiA;=jhgd1S)YpYdvcU6w&&qeN4}b#Yvn&PmtAPfrSfsE zEe~g!vvE>@R+oVj^_e)?kcF{ELQWd&YZ;=}W#VXc8Xa4z0-H>S=sYDHm9X?E!`4G( z@d|4Dis{-);?T=!XMPmg7;1KKet(_3&Ac4v54Ymc_z)ciVWyrLh1SI-vf}z z#SqD;7czX0Dab|)H$gxqk0)u;l3_K?-=uF@i-Bw&u7(05l}C~aWh#RK%8KXiy@;-M;Qv9tV_`# zMhV2uHfPdtiR;QTz$*7EAQR~z()tWt)V0fHtWvzTC|el1Cy z@&v#b9lktYc*;=G-vpV;O?(H)jF-I)PTv=hy-TLgaGEZc4ihzsh=`xH7r01ffL4C> zZ6#TIc50CIw1w9=oQ`h?W|rE>7W91snQ?*qxb~VBRGFBons;5EsPMw6s(RAk|BdkMb0dJvP(89L3;JxFFc|11Pp za=n!^BgBjyi(WzXvSWO&|6Gvi+v+mi?p^wG_j_L%mr+xxbt;`nyC!P6dZ)kw-1O_F zuEX?UUei`gPeiaT?o@Sku{!--XbEISGA>lch0FA_uJ-|%@tb&Fy%@pshev?dW0-tA zj4Q{R=*CKMh!t2Rf|e$rpP^r8W|VSNm6AnI7gp@+qMVq(OyH#&{TV)r^Agb2hWns0 z*bQ|N-YW65KPLtQ#R7>mhIN?=UgDGlG9m$xl7x){EyMJj!G$e^jSJFYW(qRhrRk1L z2bm5^ftWz;q*Bg2&_)|HmnLDSIJSAn)zh`rrec6_JHT*Lu8Y8|H7gvgbgFxDqOpe# zv#TTxy)_vakaIfGj7PT)~i)25<-qvXW%#?A#f28Dd2PvUTp*rb#4!# z)tb2gGV0Bc(EvIF)QmxPu8qqHv5TGgxYAvO@h;7+DWGw^tdng7cBfl1=OsYXC4dtN zzyxk0f!nbLhM?3?T^a^!QWVgnt*k94Qh}_EZmc~o79IHsXfIB{o{Bge=*q*%!*v)x z(}~CTkE%*3Fwr0@4ukQr~witvgMd-mk0_R#L!1-yE2 z1mh!h7^53I)|ii>syyt?OHpHW)kgTMVXNf@B1OKg^9}nFPD&Ul0BhxTB5`ANQC?_H z@KH&phl=AFrlqR}_EU6W(zB>T>~ePjE_E_Y?8u(ih4w7EFb!rp$n@H6lpB=?ZNqm(76JMTGZtUzpB}O_5)oaoY7G$6)HdGA-Ex?l0iSht%^-f9| zgI`|jCT?s`d;~g@qf}m*bO1C&`4VEj=*$Ynp|V5;0@V&iIEWJy@Ccv;U6~Uqqm}UPtWLrH zmRyxED-V}Hp(}g+jA5lX4a0qvo;t)LI ztTdwMFNW#Hjwq)lV~xGIa|n0Nb>h;I8WmQyrADiiiK?IghL2u!V4e&mT@=J>!vawg z8lZB)+7cqslOCr)CgXakhW%Jy^yNpXM}(yDTtYK(IU;H6(!)W4%@u)=0c1MNw0UkL zz#_md5I8c`;G}^}2iTR~B3$h&R`UWX9b`B6mEc;R08N9Lfb4Rw20nc|9cJewq@@IE z0<%-i0y7O{I?QA$?P=oD#F-s$%Eb{n%mWq4s=cf$FNR@eG+Huv9Wo-(!ce-sJQ=;U znHcOS!r7rF+_}6DFCLBXdSBF>h1@IN8*R8G?H=hv+5ELYCR%JCQ|aZ%c$x7r-uC_a zI@9Ivl77rLmcLPdcpgR|lk@s&XxYfnGE_OT8P?au>hyP^C6E~k(z^=NV$!#h#(b4Y zO-Z)CK2V~Z@9UQ%c>Hh>&z}x)*+s|@Di1I3#pPp7IL6SdC0#Q0!%cH zi6Ng3EnNaH1uOv$Kg+xVnYb;3bckKsTcW1&S(Xc|uJnlnUIZX@rAI)x07?OzOeKsx z-$tjnCqqfv=QM|w{YIPFLdQTBjyGp2XLh7I4FeS^YN(%%oG3J>g-~J2nYHA`qB$=b zdrA_pmmt41(u!AKj$&F3<9r^IuNKA(ll!H=;6*{q=sxTB(^&etcWoom*Gm~N29I&M zGChX=*|^;4%Z#BzaP(8 zik3j8-!RH}xp84yO!{`pjTs7?b`1HK=5hk<m>I@KLcqKiC zlAwCAosNj1>$o^FhL{2}&5>yiOb;JrDsD}rJF%+O>S`i^fXLh8s z7?+N>;qI0Fnk$o+8qZ!(_e$=M+#9XJvSQ9H^jhlo(^&dCW4&uT9Xk4Uiskcu{HqyNL^UdTkJ6dn;6er@UCVD$GlTkP2XaJ}Nt3LQDm* zXw9v)(TTMs%Ycf0sEP1EL#!9tQv=bT6RDC(1z-}6=}zqY9xWB(l7yAi#Wsd}hK72P za%2KB0hYKc0_>WAN`OUxiQ5uLUGFb_t8VNo!?pb)Znv+P5}@TPUEf>qhOYK5NWdmQ zla2-*X41hRFgru{B{^&&twTTqnZQ}4Wz=Qja8;TbDOX%sdp2EIro6{M^6%nRqHJGP zI`%i`V5qkQV~1;T?P9k|K$eOr_e`Lm1`OnVli`!Zoqgqg8cAQSZ)3WxUT#d+FSd=b zjQ7)*8SiThL{sV8&+o_buTn__*t(?0(NH(OPV=F+lDr#3Tdp5}9%NGImO%D)eV;+5 z>zxJ47-SN*aM|?h6AEMkv1xgc?8G@t+#kicfqJwT#iA}TP=$w*;3{M6%cvEV3@62j zi9?f-E}G-Q6vR4GSy>Z90G7b(x`0bumcf1Lu+pcZoBPY>b?ZO{ZX6Vq;r1aeJ5Y=p`*|D! z?dHCsH*|fkrW^e{E~h%o#GR?$Q|T3zG!H}Shd@mOn;{R4Ad|K~0oh<>3VM0{WO(c@ zhSeQ(V$xRDni;FT?6)En`x#kCuNwZ<>(A6M&I`}Fs!Gdy_Lci-Bz?KQ z&0>zrcw1xX%T3GHV&%2_E~<63E`B?;2$9 ztG5*1eK9KD#^7nKt`tUQg0uUo=JJ{ zqcrSG8b*6^l!90j!_V3nZ`4G(p(W85d-FnZus8xo%VSlqpXfw$nu3_LIjIzi_8iq7 zcD0*MiMrN9Xeq}u#6m+085_=xNaY;#NB~v+#b|)YoH1@ z39);Jt8iza47U!JD4^Ziud7r^Is-(v`Z?W8nDxpz$+>B|(yr+;!(rV)>Zu@-wlPMS zsT{LLI<49a)qAO4#F7`ITv>Z|EMX?OWprvq3D{emL06WABi%(fJJN*vHxFtc!(~;m zCESvGX9^6{`>owu{T^%E81Ey?je(?ZV=7Z3u*ZS_0YE=!Xn4O|s4aGD_a|Bp{Q~EmXS2^d=%v&YAwnm1bK3D^pJSQpH`jX%(F04N{5#8Ago05YFG9R?0_@g5;2>Xkp zFkGF0V>JmlUYCTkt?4)?5bMZLjp!FUG8sM)*Y#SLwC5$7-V+`%N5M-9uhDL(8?9W^r?VMbbFr$ zwd=jb3bq2T>m7x-L6BXOP6>icIWvRQBTq8AMtd>FS_^QPu55pK5_*dhlp||M4n=b+ z-D_^V%K8_W^~m#@+~@SsdR#x>g=Y_jl{-;kmkKcr$+A*@4EOPy+;d~S?|#Nk&UicH z&)-D4i;~}E>b&H$?#hgpFDCssZ-Q*$dzL`^9?;=+)g<$LTvWgNn99izyXFwRjC0e40T6os28fk{7@a_hbljBR0Mgd zXC);sOdb-KcUJafMynTjR56@vNbp8`Mj-m~BNWKQkquYJE0CRONmC#@vnQ2MOU1c8 zX}BaXBgigu`GvN0T<*%oxIxmZcG=Ua7U0&1z{f;zY!m>G$#d@Ap^r zb^95Iq$1;OO!qaG0+s19ft0|@@NoCsB*82LjZR#`-0O>&d3F{Pk51#|mnZS!KEpv7 zgI^?L`cvxhBfaiWrXVx@KFJ|dJ@XQhOG4~Sy#}(GElVJKL$hCSDp~;9)YRKSrn@rT z0xx>Ajg~F8UN1z(g-O4m#@oHmzVg;)`PWhn$?{%Gd6tp|3{Owt{`tKaY|6%-+(=Z# z`l33TVIspv$i_m0-!&QWRq zBESyQjS1L}RH>$9IbM%)Ce5< zI|be@1rvfvhpcjq#^*UFf7UFAl1eej&oVX`ZesG8l($>_9e42X>L|tr+HkP70_|lv zXvj%LZDtZ9fJ7WDF83RY8-NL9p^XzkV2}_f}v}b_AM|15qC@Gw z&h}&w3L4C=bV+ZeB&gEy^buatqj;bgHwmv>gLFlQ%MGIYB9!hQt5Z{BQ0boqV5Sh$ z_2tnjB>|br4s1%T%Le(*$ zdN(EajS`SahKNFY+ZeUR+wgDl@5 z#>+?*gc%)~8o?quM9o))c_@&{J0E+qq8L&JqB_bQ_3>Wl%nDt21gSDXrCW^F$Z*se z$RwfkR8!hlKql>E0x_8?C)Ss*Kqftl0LM5hO#0FTczjow!Bb;Fw=WZ^_(+-uS%#jJV9`w zt4QfwXDLq6bqx|&l2g`BfOY1_p}R0ay{M!|Uhqrj_TcgX{t1pNN45YC?Via!RAAse zTkOGc^ z6sUlU47pD#pv^J5ctwED%$-+na~Id9fUAQ{#v_~Ey5z{-kOGw}#-C*> z+vxk4?rXfiEd0DM}Jr3dkh<(i-}+Rc@95%vh3?dZS-+ zV~c_8CZVIlOQyzP6NytZ)t4jnYAPUmFjA{P_F#w(OxzjwH28-$%y#n(lA9&Qt;{W02`iPMxm+Y<3*4 z9c z$peY*9>@&zMSXS>&J1+Y*tvq?$GCjB4iATGl#GF)Nmuao1Qk5fVi{iag zPE5*>;l7&QTV2NM-=(ka_f@I3E)!|ZC7QI+YzZ)34C~a3b|&Qox|i|l&M9=1W+6Ak zA4POnmC>=vfeFB}-GhV)u}j>@5Bc?T+>mB+{8 zSa%bqpI@eHy@-kD47d3^7&$>XOFT8QO8>#`y35<)yvY&v36kEdVu%J_=-w34v%fgqG4v zS>ora-bblIOoB|Fn-qvi=DviL;>P67-CfxsI81;IR>Xe=WTzC&#FeG1hJJyWv?+-T z6Oc*Th2(1K39819Oh9&Tn82Z%(jlgUNv02vH!2y!Ob3|hx`!iNPMGNs6G=*jfJ;J4 z&6Q~|dvLS@_YO1sR3MY~I<41KK&Gc^7(W#tA+Z8kUjZ)hw_GI91Z1Z=^KrZ_k1D|7 z`V4dxL@V_a#iFYy2Hj=x=&eo0q4r$dzp@Xno*bw9(o!xK8r3zu>)wit*S||&-EVPy z6=Yg@R>0tT0obIpOG!gJ!#))rKf8q4M;Fmkm4o7_P*lalpwKS_IUYgEfhF1bAk97y znfAd*vG7OyP9MZ?_eJbhZ^UgAp!p+qrzaw|J0qHIEy2MX8QuXXj*i4ge+%YbU19mX z1bLiGo=cUwFge9~H#df<*^`)@;UBfM15O=e{cKtS*`j&_WZJMG-xbIfJJ#E_*QI*D zB;8{2JYL;9f-zRgj?ySJr3ay&j;uK;kfCFc8b7Qq!dE?(BtupU#Nt92jn-o+q2;NDRGeu_$El_i1v5Rg)Z51t#3Xmi1Z2tu z(UsjXxH4l$W(qPLVmioV*`pIpN;=FQjdE&mWx6vHM<(EU#L)E1BjpNU4~7V|;d0zR zT8g`ei*aYLNCVn|Qpod~H})Im4bNzbBNLFxa(OUaKz51Y<|T%j=X#5Arl*K1!ANT! z`Wa4&dKrRu7e%ADEDqg-|GuUS9N*6ncDxT$G8zU$%=rd&$tPo_ecOH2WxRe-Nz$q0 zq|NW60ctUbiHsp8(#x}QW!!&i`aB_Wfe^dMIxtSh#PIL=bquytB0I&ZtQ$(mTKr% zjr=B#OtR-CXG?OrR9=@f#7p))A!gi0W(qQ6*Yz%t=`a&VCIAzd3Dl(VU%4}aOgSC%RL2BCCXP&N+bf+1*?503#`&8r?k~lKeopt5<77tx25QqV zSeK5ybYh(ak?1LoK~H%+4m30LWC$)H=EO4z{preBW|Sin_)LEFo|?*d{i6DYAQKsb zOj3zddFHX?1=QlgrWi_23s_!XBVcY}>_8iGLj6$~9E{2kx-s`qWZMLw&?yY5R)mfTL|vq(a%1|)7TuY_>cQ|s29U`kNyn<=FgyOdjM1 z7_zB`bgd24xCz0y3>cS_MP&e){#hTmQ6MF09+;DPmf6XZ>a(_uR&J#%&8Jt03wzDu zOkKgutE-rLCgI*aTsYc`+{hqg5jaKubYl)a$ae@rt__!2`Xk-OAE`EeNVXJL=0lkI z(wX@ZX5Pw)C2S8w*jjf4u5v{926sek_CUZo2L!HnMCeXuMA^F`(Z>^e>xwY-C7tSP zhOxX((&(?kN}N#6OhQfI2-S#*S9D|wWJ@pTUC{RcWFpi3^nxsf&GP3-C?Mmx z;l)YZIn%+4lc5|zTXq=sq=u*@*XC#fE5c8KtlZySO$B1ods!dpr`~>48{wfsN^xUd z86oJ;i@^TE2n-O4hs&es#$qv2lkf(}B(&7q$fVa&8vCWU&lF_hY^1SY2bn6z3*OM#U!r1W{?<)+eI+2fPV+C1HuxHDbi%$|%Ag5t&mWJWME2AQBY94OP#KGzmH7vHgMy^lZWKNfM zxHSjI_Lk!ESUc|BIKWD(l^d0KO1-U&=;dIsb#F-Am{B=2c3oPw{0YuW+Y`&o+&NW# zWUxoo8wrMul9>8}f0hjEFh@u9{4&lQ?ZR+h6RwOLM1E8#QoKBo?;nDEuOMXDcoSlQ z$h9EIECP{aPWQFT1@UGcNU`!$jr;hgwu%yuW?oiUFVA6bMf?oc~{DoM6i733w{eK~PVwUJ4k17vKy228$=#O%y2!&5nn)ama) zKlsLey#T#Uix$3jXt85VO~}&(nhVpnn+F+h_~iW~ECdzkqI>F~lM**3jrSeNVWx#|0Gu9%zgVRKrzEn^{?avjSOTj2HGK`k^;F90!YHaIiQ^jdHO7vN#;C zOPF_KdK;MzGTo6$+n5eBX(JPmi6hgq@9z;_UmmL=q@;IJYwS05Tsov=ejZdtl4VcE zTJZE#D;|yQQIcg!$GM(*db~kN3pJ}$8=1gNLQ7o|T1uOpJism^aj14OIxh8qyCDrj z!piFkW|g?gYb-FkI#`M8Lp8WTV2&TH#hLvT7;eo~uIx~iyhctNtF=noa+wH1)ER!sJ5Wd+Nfots%wAKlcbYLM2DFt4BEA5mN$hbaWJ?A&t zB6x=_BCKps8WW0Fw|E_%$>UDq5cwN$4%4%z>BtDOIbOS&I$pCF)>CuV$xl^%{XXb> z1TulxUmj$-7Au5rlkt86tod-#Fk-^IE0aXQCnLCbz5_#TS!gey6Uz!gTUs#oBm|>P zdMX)8)&zQ>+{YEAUe2ft^rSoR#f=$*Y%$lRLrI_|z?z2? zC7+G;@MNpf{5FJ`-d3hd%QMqJHt)>%`Tj877{l8e1LC+e=_wfVnf=`aG+`zKISR-` z*XSZ|@x0|N?c>AsIDfcSy~yRDdLO2|c`04NY_E)xQ5KJp9)j>x7mjn^>%3Q5;xfyG zJP#`XGTdv^a_~M<&Q8IM$1nkzNK3rc)(OPa<3ZEobUqB>UR~gMTm=|P$|FRF+p5*$ zMa9wKD2H5kIKqFGJ^WYOB47={w#o{D8*C77P5Sop;4*{;^Pi{A;MJW0 zoM%NmP@jY@hJ!7s0ccMRLU&38TBH3@8{~;HPiK^RI4M`w80oJhVWsp~)`knj{L!9F z2bU74hU$?q$9i)D(VgX|fvh@4f$T(m;ylRC%CnXPnY51?J2Ktvk&O!Z)S zUs(bMTXMKv8%`dqz`0{}c>d)e9T5MVB#T`j^9{>|v5Y|`5^%ktx$`PnS~)R!8#*C2 zK^Hdlk}eDk<6hmujj@9`&{Tn%)OeIeN1-4nM74*B3(IiuM24LgvTPV$Is_okHUJss zKFGB2MVh%c63yHRFc(Dcp!?e9z%bKI^XNup}#xJA6=OYGjjrPq%!KAAUofh z@rEN4kV!~s3^Lu3sYF$AWAhMuvzJmNKr)7vG00^8+37v=>lFM9AX5;do}AG1jCx9_ z=>U`VGSy~As7Ye3yr|@CX9kWpC1a#1iSUUhe6(@aq+>%Q^U^jrQk%%_QZXhE$jf+Y zN2+l9WD~wT*MVy%TX6M6D^BmL#9%{)3N4RR%lQ83*jJj20fJ3>FeO3u_`YJCK3s{L z7uqrTSlk6cWb%lTF8%&5w$503TboM5Q6jKpxlCn$1vi3@PHc994s4n*o23hzyn@N6 zmvC;V8y)4jD2NDA&qU_=hakn#18H`iDD@6UmYp{;tv!%$?~4KlKV(^Xsqiwxk`8RA z3!&wLn4OMDvh+l;R}>n;Gf@|sjxwJF6u3pv$ps;1hX+E}J1L0CG;pP@0$9Xa7euac zMaT+Az zNRTCc1!QXEi|)Mn{4oKUNFP>5K&IT0gp&d@P6cE-ymSe$1Xdz_-WX>3Ivr+u8`+~% zbY+y<&In}U${rmPfYm~V1d?_z2^UYbq++BYkpQC_1Z0UgTC)Hz>DUk*t4dH~unlp3 zm@qruo{4jknn5VuztD;6r`oAboIO;B!_7JBt?h@(Q*p2)8T(6;6xjL*vO`UoINX_y zle`w^Mr!cvu8gfkSM-+v89_AB=Tt8616n|#6JPF&<4;5hDFJA$DD^{PFr zJSi3#e*Vby3r3m~Lq=;)B%8aT!ZQ+OZehr^^+lnbFCpfEOiKwbeUY-;o!fXImD?7$ zg`hGZ0Tur7NMq<3vQffDD-~j9*@ddKjPUh@*jl=?bxw$&!q+$>e3dgIR=6N^nLU@; zA!wZ$LU&ms*4YVX2YTpS&*9}${PLVG%X3S%>-MNdT4wG(nhufGEE9(Ur=uc zne+<%xggUaWGv%?Xu8f+#``NbCIyofVCuzjJiO75Q>;`6S;^XRL(rZXg1#I=EIk6v zk-jMNazv@818M@?(H!BAwixNf^oP7yS9>&x5Tkn&h_xrnSY&?Klj4o$L^pJ#dt;z9 zavo$0jr|(Pv^KI-Tx`>xv(!UN zlK|@Z8Bv>IUYqJ5)0gQmlldoS7GS5GnNfK8aHxS0tx_Y=$}rpKJF;+QPr3rxSTmhv zhm8K3r5u+68J*ZzQyMNXw3J7a^f#8DY{|f}<}?g*zY|^AxI{4D=J(z?--EjsFCZJsld~l`xJOoIWj5_rsZO>b#I6e z(|awoWinkTJL=J>S3I7yht1x=%+qmPIN`Ad15x5bxlMWCwR7SU5A3 z^g+UQM-5<(fyl7%KpvN66I!|UK7^C6a$|*V;VAWrMyXE>a-4%z`hBWB4Ei??+y7~ z3C~V75>(>8S`^e|`t%fC7N;-IwJ9lp5nM0MwrgM;qeGKWa-<0ljxkK-^wDTD?he$b zvB$={3l*I7mjJ8R&=FKJF8`@L0;+VJ;O{xZ5c#q^Z>e5xqK%LtIb@R6f4;8}X9(*v zdkb-Kph8{$`xkpuXeqDRJJC~wqm3CDVu-oFG#2}cqSZS;`--D6SeJ_7_FRnZEyaoc zV%)pb0}wFNFHdMrO2#H*nbI7TmRF{`acyXu(`sZ0^-SdS7$znq|4VxG&fqndi6-aH zU`ocPlg4o#Qw@PbCo}be5SzS(CpX4$w4)wPdFd#Rk4ABL7z+HuknI|P92bA2Sh*q5 z+!-kru1MVNgltDNhZgW@dW5Fw}>Bt-qu-pnhpIbA`bb=3; z`);;DfVnmH6z2jjZ}NH_<8^7FV)63zTK;}Ll3Ju*f6Mxx9%QBf)1|Lh-%Cls)#~FofX8Y0-VqkEe-lUXim_^7;8%p zQUH^&#@f;eu|zL4#L~4T3dlUsp60FE#|{>UzZGQSY81>`Qq)MWYE)Pm1(q ziB!Bx7QC<;O5aP+#RY@Id1od>eVP2vizDMkL(g5 zedTBkZj3eK-i2=5J>P}9XFGA4A@$MbbiynR1C{aUp-b*BjKIDUUPF0nc}G6Z?ytaU z85`|v7oOc2obS1m@}!4{y4#ZbKlxhnz!v_{B#~Agtky@XP!CyC6NKMu?kkeVjAo?A zPql~L;Pf_bpFe`O(rg8=%9uE0`vfA**$esZLCS$;+WM$)QUE3(OERM~v+<;>4@Wj# zSh}?ra-0Ixqe-PcQOKfGi=u1uTDco;%eGTHIB%u^%+6C9o z%;C4j0dcz+x>^O%(Rm?sgQR1aA#jZ)!Z$d=pAhr?$QB_h+~Kp#0Upb(;jzvf!B%!? z%uglEq_?*flP|T=FXoKu?02od`OxxfCC5L; zUk*2DFDecLNI`QJ( z5d|{IuGc$sloR897sa`5DBjM$FN*+unz^2AA`TRVd z-KV2_e2M3H6bBnCP#i@E78InOmrQr@LZ%~S@2%1*lFeNd#6&Wmu**>at;8dg&Yt^t zgdyKGSmljL&R8PD&1AwaQAWEk_f#WX_^%^~*4n{yr4?L0H;40QW^f?H>ya+}D)K*~VjOcC7h}r6lz*W}p{@4OupAcZ5SSgU%eYOqO%h$tW=MMDM zrx9e`{C&y1Cgzx&`B>H0?}PrQZ0vtSMj)GSGcf^~gcm9&NTx52+Tlt<2kY^*VPKCBdosoqL`L|8&hUNWLTr>I72CCEgQcq;i@ zD#SE|mrqBl@%)7JCQ?RjOy=KkXNx$qd5Fm}nWyx2F#(ylD1n%~fk{TT5RmDkzUqmt zYS2WUvz+f8f>tHV4p*v7|J#Ro?nf$=1Y&B~Axh?NF;u?E?d}}scbsj(mlx@*t{q@# z*^L{=n=#szhmp2y3^%1Stc+7`S^j7al*M3xFgwzkg(D1Sua36xJ|4xZC&QR{HLC8l z>ck`!nxr#4DYSQ(XMKSk<}Pz zu0Ul{6pF%vQ5YD6OgAs2+PWgy(pf3pnm{swm`ETNyWLKyDJ)sROk7*+PDl8z+6A}I zHmkO*kS(@|+3l{z9gDZnlw=c#I17J-ZSzFQv1d|n<{x+89jhw9Pv_{0J(baWPf*aDm7Tj9KZ2b=(AL7Bd{eSvdB z>4aGZW@pSXJ-0}G{*JT+GD`gu6JqnBg#wv0@-v*6mGuHS>h(#?J~@V$cMjs(v1$x9 zCZeMt2>r#8sy#*;?Q25aQ0i^ZkiZ@_0fbYeH}+*m(XGX+WY^C0K-DwZn&iiDl5UI; zYlw11Q;aK`W8LW7+|ixxODG26U_mI3mJwv-Q5dO;#i@p5)g~sA-b!&}7xri{lLy6B zB5Z%L0+~FFEsrE=38|9HB`*poBVbCEqys=69g_42*+x%~(A&!dV$V-&?PUsZbY;2( zZ1bNDV0%QcJd|_}{h3R7+mZ~NxL-!J&@%PKEs7-k6F2uBatrd^F`Jpe`dC)k)E)h>1W|Oce6`{88*5j3O_B%)tXWj^4;~ z@J5!6v|G6%g+NQ#ZI2{#Mj; zW_!4NwiTW$cB%F;pVbx!-t2^+P0kE4?di@O5W3Zap(X*i+Fpg0Zl9aM>Vpli`)~ui zzc8meb3^zRX*1hRF^pVer8%=@R&b^}+x44G*#6t~uwnRWyJk5eJwC;QYY}v!mb^C7 zPPRhT+3#B4Bar=d9#Q%_>FptlflQv2Q{$M+b8=G939_k&M_FllaejXxx{E{5TO6h; zOJ7ceYRs<)bV7-j9o?8C8p1r38#|B}jeU6$T53g#gqVJ+y{s-`Kt z_ZO)24C&F-lU7x4=7_YL)hURHJCpfGCpGDzrc6cR%1l8fqhSchq_))=0<*!%Mp>09nT5ANaHz&Nd!1bdIaQkE{e7>-O`{y>;`Kzti z^7D<@@!L&sTDK9qm;D!vk9hHVIbeF~3)a^qkZF1YWPkaG#=lN_ce$SXGoSxs0NMO{ zIy1aJj#qaN;5IAx@s4zK<_BUgAtP-t;;?EX+)x?hOpw_yytGGav@d$o!>~6i9Nif~ zXiN5G=;)26I1g^?ih6>qHpm|JA%t1Dqk`F zdF>megG`*5z)Y89`Ag_|x-|u7+tM&vABW=&@i^I#fKyHK3b_=9r1F}$Oon_~XeT3N z$g`L#Vb&l?)sV1Lpr*MrX-}&m%rre7<1&F79hszXJT!nz$uNwMJoGKPeXs~O`w7~; zc?^H0ca@FEXUa!xlTR`U|CjfD75!N9;YeWY_utzSSkUQKyW3CD`yDO^W(qAg(DuUx6Ta7C68E>hwvhmIgT10@PT0wno90jPZUrH)jk^DPND+Z4y&M#tGm z;5No#v@Tj{tU;D1s^#aJlDU1lI+lc=cZSLdGeU^p`IJuVDZ|U>H}>HH9omU~h3X;x z!;Psp(UyaeM!MLpLR{Kcj&lri4>lw!*j+u*h*Lb)jf-t~Et&rEAUR!_f|(&L=lR29 zcyi|`9$p*7wUgaA+F6F4>U4CJB%(DthW9=ejWHpp4DmxnkUwfdLQoSNjtbuplzIgt z+tvfAyB!HIZxq^kB4d{Wvd!tt%$$+F(;mqLmw-&bB_K=OX^W^$X6my5tKJ$raBSAw>d%D)SN!C!sZ`s!q%Ve!0un0Vb_N%vG!O0J5C>T<+ZY7U0p*h zflSkTfJ`jDv|R|uWPrD+=@SZMl2N@loDAV2!$Ez1vGv+E3(}#cw~vVw#Bf2mvFXQ0 z@OZovW2}&e2$n80Lz$C=F%;vesxXhDd`-LPJ#!VN~(tF;ix3jRw|f1B*;Vpw1*7!jN9S_V)qV}C~#@;O2>sZ z!fQ_oj@L$Gs3Hu<%ENG~E*2;2V^tc-rOqtn9_6>5-;>7Qn1s>FC>*bdQ7}_!CepFN z&{z!)$&mQ*xi&mzc=__y0ZiOGjB^Z?Pcf{PN5`bC>||>;LsCfuZo5)AK2$BDi? zTpF%sm{f^r8#*^+375FRB<$7P)$%J|F^xPF~0-$Z{-PkR_p{xeM|bCT5#CAdAq- zGIvmpOyCv2!&1{W3&d?TXLxC)mKVABBiq4Cfh^PBSM^#7Y!WTJ5VO-&NfKd$*4Yqj zmdce$dzsUx;>Nbab(!YITs|e#2r-90ZBrn#{oO{`{cbC4f6Wl|!`(3dE3Lx>7O@a*U!yi_RHPa^}!0P{l)(eXAijmGxn?>Qg0Wj)8B#qrvTa8 z)@$3m8)WjxiF&yB@m7HwH@i{Z07tY#UzO+>fa*k7Ar*uE0#f$Ai+q&yaF_Z;1lgt)q1~&ro`- zzW^uYWyRe0#;F#i`{UiXbD;w-zdX$HFpj(9y*NEst%l65$p}DWMhJ!)is-_k>A<{s zPovPA8qYr_KNPq-qs+?_rJi0WcJ)AwcOZ%#JW*)pjvPxTWbJZ94xLx7g%d$$N08Yf z)6AA2vwZ_(0-Zf{RVwgo$XMmP5Jo!I%SWmxso|2Iw_aAMuF#q8`N_4zx}52CUE&jp$2ZOe7( zy;a7`wCxQbFH(VOXm{RJUtNpwYZgbhFY<8UG2To8eCwJEsT z$}qT1PpY4k6}ZGM)vwJ#Z#-aX%erv&2M(-Z2s%r@SGgDqKTD~v)#tQWd6 zV{xb`4Q=t^s15Q#M_dH|u%eLXWRDVe7nHiXqQcD+6?A3Ac5X_!7Iae#Aq8MLmULt0 zHptj*g|yw)^B_yuZmA?7i`l#z(F`wRHk%`#ZcJQT@JfPg-EIV}+=<||W(Zkl4!@PV z;J<<)`ZAMS;xu z_cjEX8LWS^1$JDv{pTyN?q5E^_Ft~Yj$dxUmVeob9Y5Vkx3&e_e(@)K@#Fs|{{R?P z&MblKP0fSs?dcca6l9_|q4egmuamaD1~N4;9zWyxan-1NvOPTBt&`<)iBi(X6g_#fb8+*H{^D3IZDC{9$z(3OSokH8PD3C?Iu;vYe@y#iQGgdJV3t4cwU zYo^)^c|8XBr*XO}7MB`Ra897zoTScIIY`MhqYHa^V=rbH9^Sv&gKMXnarHReb6XaM zWJqwjx*Lb8)C2Ah39B1p4LCbkqIx-HI3RgS<0f6%gYg~(v`5$W;nukhG~@?kZ%s1x zmM5YsCknNaPLq{@_UKULJMmA*-wVBoaSSJ&Q0(l8N_P)bxp|<%#RDbwt|+y0p%b%3 z#!hSH!m=&IiCH6kmnBknSs{6sjcVvO1zF4nO<8nfiCiDOem7z_TOxezZbWXdLfBe! z1vN>T5SV#=wjEx}cEFeO9-r?Zs5Zgo_Z#5&@m4r}vW?5k6vU(vU#31QtO!DTcz@;u z*FW08>5seN@bOMq(XH+NV1okL+J9Pwtv@E*{&gF+{>yr7`Pqk9{^S1zC-&JYN4Atl zW~{$5$c!KQHip&wdP9<<{@M5#BK6|k+4GoWxN)8T@~1j;6vz(b1TjQpNEpsa7%XFr z3BWWrRv+kswn#4pveqbf)%MjGPUl9DwS+pNjUa0aaYl21J!(A76v*lWt7jFHm-Kk)pTUwVrvS<+f#6*GYywJr0qx77YB>NaH&fkU&_N+ zQ#y{<9nE{_jeJ|)e@_ooI?+|S zxTD;GAhU5o9vxWLPD{EnE4nc|x-lCCvDBS5NRqH}yEWn&Mka8YxYYvjo6QinaTj7Y z>{J~CahuE$#?Ufy?M?->%6;2HsxIXnn9w@78^Vtn7bB$o*zLwGmFgGl$cM7I6O4F4+EY8_a&U5xYLvh;6^zh)q9Pk8MBM zitRrYXSNobfBHLo@ss}*C-ytAUfN@NRvP-38v8Zy@Y^Gp>}jw4rrjWstT#cJ@RmT zNst*T!mQQXqU23c^7^}r?RmJ}SBlZHSPbR_qCdqQ`_tSpl<$W#HIcZ{nL>!=;y!<$ zh$n(uWBRv@^X&?+2iZ|cyy&7!-VY7#w@gFhO6=8dJ-crkdcHOYleRIwrCCv zQp((Ij!I`|l-Ss!+Sv_dc8(~ubwIwk6|#3&BAf8aqytOc!H{yh6;gKCDv(KASlm`= z=(qX`$db2OBbM-rUb_o13@xM9aM^ZSL`iu0#SVn6wxBa3$OtZvPqxDQ^PO-fz?}cI z39cV+A-7D$*etZWEyLanbor!ER)oiV-)KRi^Uen-3~S|cRQ z!WOM`WX%B#F+D7m>OASjd@RuzXpP2T8#IJiE09TJza+s*uj8>=LZC82rBm$7_gC#@ z(%>&`T^gV=RsNM^$g7+!9bSanrLGK|YfHhIW`av3Ib}5rQ5lvFGrSwA45dPFq9&Zq zDF$a-3Aa528=aYQRQ)*`%mxWE>CGg_BuQ2W*|YOacyzX&AQMN%^~2I*S)@YC8w@S4 zb!6gJPcAMr(P39wr%loGZuyrcsYh{demfta=15x-#ccGo2Vi&(9Y?X7`&7 zaQI*oT>h{_0ZkhEcl>%Kw*Pu9w*7ho*8X@k!9{2Gv#r?rlMUGL&&#p?r@zATfBj!E zdcXPl#6xemdxU22! z0xZ!KWQRsSLd(+vEk4$0@U=p{za{sf8w<8ZeXtewFoaSdGvt0rQmepge?fq9Wm-s? zrou{rm;h(ITf$2%V_q7;&+bXa>6S!DF4kxbLsL4s;mUB8$}n6Os@##ZSslvrro3>Z z$Pc4cp*Yv|uQyGhFv@VIiH5!A( z5h?^d!_OBRl5wRu2{${^aJM%b5BBHc;ei|;Cx;-*$0K<@lkQ3$S$cVAzv`Iz@>-wP z8+p7DXZwqAVP6T)vkf!14ym@Zn`fF7$j%Iush&&e<-9aPS9zJC<&|#SzSN;y-SgWA z@#4lI9Bs`-PhkuOij#4?GMCQT2NmvgUk-HQE^g=!jX(i`B@ipOcR+=$Jqpb%ICVsk zl`ZmiTO)_c*k*~uO=d{kXrbJexH55L0xwbgW(&k^Fr)k0h3It}#B`8J8b^+WE59#L zO;dL`B6YVbU7agpHrpd~oehH5SgX*|dzl&hR#?LGGYKc@)(9}~FXXcs9Dl!s@Y<+= zX7;m{3^CWj{!g2+;}rok^PRW zAI_MbTeIZI=Jl0fe7+!9%rHBd$@zVBM56}a5K08uLP9KI^agm|PddPK3B1%OpM;yN zm$${pE4*f=`Mr~)05$Vy5D(9{;cQnf`m*KqZuSJ29a z!L2cbpo?;4cW5KCV6DiKBn@=n&MU3!ofm+ z)yOaTW9OSwR73sM-V8!3LFp2~BVnOzd!&qEoP?$25g4nDQ~6kux^T8x0H_VhD7k3o zdF;{BU>wQ!!C-+8hDri(wka0l?UJq`&L|0&d(!Fl@)V$?S5ijLcyX#8FV4ugWp#LR zn&IY2hLxjb3S?gnmEz7|A)R3^ZgW3@t%R)?n;EjU(CJYZ=_t?Aft{*}Q|EQMHc_>o ziS*xhK~hDy-DNt;TLjoWf>9(PrMR(&{EkP5i}0A|B+p>pljPjXU8-Z|)xAO7l7Sab zwPKu*x_Gb@56`sW<+Xl1yV8dT1lD!BFL7iNR$d=#W~f<#@e?(;bGaQ4ZuH>ctv)=z zcL)!!_TlPi6NcOJalEwvN6Rx&>g9-BI}7AnTB=a8$;(?oti;X^1y)uJEA5eMZjK@w z8`Wl(Yi5b$P207$GKQ6jbXzG~%?TrOByTfE;+EZr-$ZRB%nVA{M2E&OGuO(Qq2xA1 ztl5g#jb=#S?SQaV@_7e>S2MiaU`|;gc%7w!nC}-1H|1H&6}IqNW)1Jv7 zSB&hnS8Zf7b1PX#mq4cJ4UkC+h7PiH&i5~X%m`v{fb45vW(qD-$zv$`3sxnQUtUD2 zAVwz$(c}nT-`$HF$12s(%-!ies^MPJC7OfnQA;-_AXD(7WO<#xHA7A-)eG4}knLeu zDG<{^ChcMMJ`z%ztB|rO$VR!b+CU4`1(~BY&JhRm{FNh<#L?4Dl5!EPa<3$HK>&2I zHBB|tODK4uJwb(o$Eri=7#MmIMzWo>OGzjbdo)y{Kz4`lynm`eHTdJj2{rJgII`;}8*%km zEn!xUy9Ad&OcG~b+&qBWXWP_p+43~Nt+TDlkzJ49C;RI%7N{Th(w;52ChPDYm_-Ss4%n8&K70PPRO&eLE4U8 zD!de!rEb}U^lfHzWjh&W?m)suabKJgO5)ZMHd!i=3EVQx>{Z)Y*s9ISu_bS}LFme@ z2>fC*f>v#%^V$lZ9XQjUgZ(9; zXixS~fD&Le1lXX~hv4#+(9#z50d^|6RY0a1_9LCp73+%jC?~Xr+7V)OWdbc}52Gt< z@U>8%TSBCr%?ee1yQ!UMj$BnZcf z12Iw_jMH^dbWlmS(VK}YbYs{0GI4WXj&fzvkS`B*OUA#z?Agg0JRhr7(?=tcLnbfY zWoSvabW7T>7{1B&4-S_SKt&2l*Sj)stu0jnP2Aa4Iz-Vp9h(5`MpriO^yTAje;ytU zFeDr(CbT%E#D&c}F>#25roiYx*RYO!CD9WLFsyOC$dSx-S9Q z%yI@ZFq2JFQ%Ry!{mdbxP7`4R}VMhXiXN9 z?6x7-iEhl%j^MIHdr$zCSj+vp=E5>l(uy@Qa0~I;^yrH z);2;+q=8JNyD|wclNpX?TR9+n%_byqK53h^a$^Frz?It+$oyCCP$?MV$O2c}!Q~^# zEwh5#Czf#d{Z2I`kJHDyVE2b@T2d@SNog0e`Cy%Tc--oPO)&fQ25kS?TII&p|7az) z{d@z=ezlDtTczozAL8?W)*AZ-WRo*mQ_%N8-$Rfs{|d;|7*T&F$V>rdDm|=};d;c4 z3CN^_VIE|!hVkY3CX6sN>Mig?hm02%MTbQI)r<4;6`0XY`SG(3F#<~<)*0uDj%eq3 zkTnHyoxy=M2WT*p&jPZh5F1qco1rFPH}=FjVtd>Tw>)p;BU4 zc!@eu7Koz^4Tp>TRhW1<&j;Pf&S;GxV8aQ^I6L(SlMKqJ#>%IgJHgORp2L*Je}T$r ze$RnScO0doyUgDz5W6ZpmkeD6WHU=_Xx7v{kh6zi8H&^ML>4aarNZl9>H~gFJ0GuLW}Tva<~kS2MJ7p81;YveK;sU z(*UOH!4Y{9fpFz{+>x}9@lG|&5>H5hZ0tZ0t_;`U#weW@L3a0at9rP6;_jfz8Iut+ zq@iDQ_d+{G7k0fHPwp`Myw$Bh_TupoOg%Y<=Qj`0_4VMw-fC1ud#ZOYRC&9iCD0f9 z6Jk+hYl(74d*#wZWe!@HDdDGpEN8a`o!HI=H^xviW%CXVW^`l;8+TH>709HWOnNIL z8BQi{q4TqKM(m~?sz*~4x^fEwmu*DA@-6uPv-h82S+3o>CfHrIcU2!q+NSEoLhZII z)g?u*DoocXhxBvYhn~7h*>yt{8kl}f1cp^b2iwKe*!v_gbW8?VnxF5Gq zRA96&kxIs2fvh2lHd3i7SJZ`gDVRxxe$6LaDIjYi$OK|dQC(ipBB55KK}{ zO&ku!z=2(8joXSA!b{XvNBU0m9ST-a8RLp<|23%F=YvtgQC35xuIz<0cz0%Dx>#&w z1THu4Q&TC_WQz9v3TkRnMNhU$;>)-lX<>RyyDhfvDS`Hk@o2P2sUwL8$7J*l0mh?1 z@8NLaXH|BGHdBCht20ym+JPDnv@|RdvHPeGHDk@jmbd9 z<8=yTch9#dkclFDbdw;v(Sb*IdvO0&H{L!S1EnWk-k_43YDL%K1YRHl)J|EgQ6VVX zy$xv_)*@%?CggdzB9~B0TkoLMnSd9B89=@h_NZPQA7sNDVctj#~ za~P7hgdu)o5K^~BV6WqDrN*S!QY!mpCYdDqH)}6blQ1^vt;Tw-Ra9lGU_WOWHfXPg z3l*6i)tKG)8jx9j`~Spbmqw9&t?d6Y{tC!6tCj@WPo4j6kbPNxA@OUNiKYDf{Ry&< zA3mwEcjHQpy}Z?d>r@(JH3_t3{%B6{QR+!-p~f1ztAf_bfGrAcYGsnox5oMsWS<}w zDTT09VxfFap8o{1dMdQ0Fg`D37ksQdV1vq$HO6^Rk@>0B#fkF0pCKj_A_QU*QvY>^ z_fMBb;6y<%hBJ4gGsy$>5ze%=>(QC)L%SG;37Ifk5TOca2McI74^y$pVgN0xlyiu( zyWWz4TWwTHE$PbkNn-s@FX1BfU{V;{sTs3#gYXfM-4lg0RD?&zituEVii|e%IidDQ z>dZcYOq7@aPmTh!$0NmfHcsUx$9>eY9Ef{OeMrDE@ ziUNJqMl%K5-BG-gvBMMDTb+^bwFQMf9>{kWMdqR`rhqJ+YD_?u;YfSQW6Bx_70Gsv zjCDv}tx;tOt2QEj)p|rMT}^w**YNcv+x?O5?2gPWK7^(R_HXn;l7lOfojeh5?~cI5 zPKaFXj`XcTY9_yow2s}d2hltxxCB#``KYGxtww89)3~TH4}(>3)mf_Q$~IGxZCD^6 zTLFi;%i*kJhpmR|;W%d%9A?|9f>`TsK7s6=8-Dsp&fBlaeog!&e~AC@flT5{b*3rn z_<2QCK=#u+UVUGU;HRhkcz&%J*GBR&Mpe|6xkuT)%AieZwNb30*vsOb8&s>2SVl?Y zH%54%Jz)o7=8a~8tTB@IF?_R%y5LQyp@ppH_h=^Yn)zA*TlpU6&mgOhaYI+eP6e{@ zvPi13C`?sF(Hd%26D5Cjwl*H;Yh!VuBn%_jyU~^GNejCP4SQYC66=bt6kqfo^utJg zsDff2)uhc!D~-fR*>p0k)hLe21S7luG zRJ8(`w3-RXB-wv)v`Q0W6{-{9-i1~?xYnr@nW(X65Bu@tVIPl!8ddge8jmja@cSIm z6v?K9s*z0xJvJcM*98>;zBuf=1$nX%K%gC>LKB;ryJ<7BH*Us$2WRY~`r5ZB zVBcCtqzcSdJ0eM96|Lr~4GLm$E1eLvY>kSTm1|KO7^W=deit`nxOg(Wad7iCsz5)r zac|5Tcg>X7m9C7f2wCZlpjGY&klM19p4e@(MYSr)%B7THNL|@BGY7cq+p0?cP1-AI zC0Ahm{FQK+W20_+n!3Pg9u?ZG!7U^ zYx(g#LH3S6@68B4Jnh4~``vhcr3u%D^Dtf+gHD2>G1`Ob%LP>gSzX{3T0;+%?k0c& zHlaRD763LATyAKK_eFDzJ6fWpOoQr+5K~9m#~F~dM!2JOFKwl)Rt7qwI+Witg0G8p zNB4dW$V8D%RYqgFI$Etzs=U<^!lyAo6E(D*MIji^58^Ql$BQB`b|?r#nf@50f*j7F zMJ3FR<%M84pRXg#Wa`8TT4gz2Y)ZrBrgYru$i^L+fYE*ccYCC?foe+fVV__o5R(Ge z8y!?--F*D0!=#Ge7|JlE)WRXwRwGBwi3m z63+=Ki5Y;++@HCvUN_FK;qm41O5EXN_m5YrWdHs1t$6=n1dj=;Vg7ysvddJEwgI|N#+hM(CA1T3_tDwCB%E^s$l2dDYVux{Q`c$sa)y16Sg)^e5}tiSzVaJ*Y`WbR)<_KWxe zWIw5$i@(T`5oA&Zp;XiR<9PdFN)^OP%+Ka;m>}^G)Ur}FcXU@>P)Pns4)Rq(_Rh4>cXhh zLY>hXCHb@seBF99hHgS#kTY%NW;BIwQBfW2jIw}r3T935?l?+lPL%9bicCNzg{tQo z5^=3PjZoQ-Yi;`&DY#0gU2ICk1*$a_k~gF3I$aTiQ?lY&5{2nv+Ed1HX=|#9$AyMu z)mJGYElXFA&{h&sQXU}%tYZ6~2zUr3soT0Ema(V`2Ry#j zg}YaeXp;R;hw$pzD4yK!$4{?lFCUGlZRpPQmEuxwC64ANqB}bV^$Gq+*}Mt|Jsqji zx1xNv7jj*lk+qR<^Ki#OM}lp`MjkgHW#t-Vu5-rzwGK#MqXC(KEpde-;-y|}xjkZ+ ztwrn#2L-YyTRW8Q^h4%mcf`|%hAmx%FdI7svarQ#;b*=aVauGL>6 z4*R*ZmIT>UC#@yCd7g^+_zE&j{I`OP5c~IlZ05ekQZn97;{BU31+nM%JMjG05xl$I zffpAWaJDTCLsUCQQhgL?sspH=_J|^*dJ5i3g|&%~xhQ2NxiGPk63v8H4dGQCOn8M; z#RWK`YR@{<2a7FTPc`R)M#8KiY$K|IHlQMC9csfhAnQG_TQyqGfb2w7G|tv1;3@$o zAiLh4N_8Yj`3wcO%dHxyU2Wy2AckV$Sz1F=j6u^Es_S%lb7$!k5MB6~4Rb;NiotBw6XgG`_%Ij%23rV{g` zRAvOylL^|*iDCt^R|2eGK}+JzRM{^8Hv=*Wv6k|+qU>bEkSH?Akv+TCjhDCj@%r`v z&JPt6IEQhe|1d5M7UIr{dNt?&;khHK^y2z-1FlZi;nH}es_=h)vsbNpKDp7UYRK;2 z>cq3h19Q z3zfSFv&|cDc*`c_ZY0#!JK=!CI;7dHRRBv{V~2fqs|mK%gxFdn*sevK0Bq?RL=#qt zRB5qfb1{-4@`D=@Z9wJ3bJ3szXD`p{{&=WE&p3V_Uk;^&$%;!m{`gw#spqI z>c!(5&3Jab1s`tHW}KSfWVJy8CO$@mB{s4l zVv~YYU5FFvL)W7^(18G3M}Rq_k>F}16zi$hYJ=CILLe8y=k~gwDPb$RGqz)_Sb89- zq&|V{OkKQ!)lGuzW@j31cBkWZA8lXH0bJ|iV}zPoZKS%o-G1;Fai@((DlZASeU}is zC+dm-Q#mYx>#5i~+CB*ZnXDAv?&jApq%}xlW|i@NH|-}a<}6&yUXnfe*)L;! zUf=G=i(5zW^k$a=*}N;&Oi#2FuehUUdM~ zF*~tu>uT)ZVn=J~h~}_eDD>Eb>I*OPW$-bz#pd}|@YY`jH?1Y`(Or(sbFJZ~y_5=V zxdPdm@2nKaoEI!bpp6F{zF&mZ-&iYCj;$K9;&Dzd)@vRhq*SZ@aI^vjs)Ox)}xs0g*Y zN2QQd>asMUAl9KNbCBaq2*jjMQSw|;8u3i>R0NnnLXMJTzu!k&Nn0&(SCvZqTrP3H zGaC=6%$`z#Jr`9*YxzuSy^iv^p3G1EkbI4RjG+oykL4?fJsziWn=HoDX~J((VD>Y} zUQ7{E(^O$6D)8<^CEgyd_!LzHTBU-S08EYoH>Jovf$ZV&8r2XkAQM|DAiF_83CPa$ z_>UrPqbpqXE#YHqLugrJr?D+O zwP`6AEX0=CR)m@jEv60D&sqeBAFN>iy*W1Ue&`BsIR3C0cHb_9{cL?${^|dQ=`Jsx zdot=;1jtvAY2sfAvYBN6Ujx~%?c!gHe+pzWIPs_V)BIk?@#^tW+`H6($5$Hh=H?N+ zx!R0}lO?K;@fa0ZM~Y0aa8dazDW8zC2}#-u$RxxniW+N<+^nqRj1p52Be3d&ozN6Q zoB74Dh7hX?v_nN8|LG$LvY1V1iruWBIdV8yO{bWyi27_TB{!x486if%JQyT62C|gu zQ5Ek5lawupVv_i|MvITh;|#HTDwj1(sLV2sj6Kg3TQ>tvR2sf#~9-Nh(m%8y-n#)ht5oC>2XzdDQ zch5KB&V?q`b15LZdF6=O$XCUqV`}wMKz8k9BaR;}#kqk>oa!vXRAVkWvZGK#RhC72 znd{+*0uO$s0o#!4ycUNxIwH?yJ+i3A4m#KqU@MSLTbZ_cHGyV_R9eO)s<4D*s}Wz!P?gysp74sHVvDw2iOA(Ek>loxwDp^i?65%%ZIph^R3~SoI6EVHodXW}?Zm+0 zY_wz?%v%wkLES4Z((JJ^FEQF8FLU?O0g2()Y@K~?}o}$d=Em0tI{LvbA z-3GJDZ zhKB^>uR(UVi(vW$GJ)75f>IzR0DH;rE%8ixAo;!?P$9~MikT@D0^5f}jFB8FGQw}F z0MAcQfe~IWPf&$@3IW-dFq;9HKx`&vU?wFTqRIrqGJ<;sWG@J)SG1N=y)QOWKz5cO zlRTL;k4u59G?PoRUqE(gQidwlDqH#NS|={^`(B_j6_`D`(XDn_dU*RNUeZ>I8hihI z0x$0!!-a`zoE)scql>heO*uH%U5bICWHcoDqr}e@2Wc;}H?2W)pf3(@UPo278u^=? zkiFgk8TP9c$kJA?`dO8IvX_a=?GU%j4zaYA(NtNngqNr>fmz7nrL?T>NL{xP;WjG} zV!ae$Hp>yZbSXlX+aO^15=5+9MJ09sM-C*RGkYKU^Rtk%YbW;DEJNVpl?bw0iC{}w z*2RwSGg^T?rgrc%wTFkaD$QSp4YL<3MdmzjF~U~*!2UZz?At}3L3X;=7kKNz^G(j( zuOQRJzXD`mmS6n0f@~&!{W>+Ohah|XWPn%TdfYl&jVG5I@PhH|TorB(MM5?oKI!XEWe#r094^=snpAn%W4;n8@mQf5!43YEoteuAoy z@qz%8ctvmPE{+AiN&0;mXE2do?K{E2uAtg%fx0y|A+n5@I!XSV6m|I}Gu_d-sk!{np zW-P)UV$4LdAe=W$qgw$V)U%rkI6Og@`QoVK8P7z$EDslf@H6EPim6nR&Do@1e zx>z->EQVL>a@S#kkxZa+oKqh%8 zfyR?Q$yFUv>PS`*1!htX@$wi|*RZTWYCxt`7*Bdlqc^SObg4?XKb@q#BgCGL7vb3$ z;X;r-9-;-MB~-b%j}0iq*xS>!3S_E?RucYHV;WUf zqd+EkGmRpv#M9Hf_*`mJicIRn#9GSj<5ZB-Z3on0jCBkaDBQ3{nh(% zf3z8+rD-S*bVJdu%_#QWh$8O|$lq*_gP%Z_>+FC$XGf&1T88x1D-_I9mfIqcsw;si zE6#@MYwR7>Jt|eS&TflXWH8#&( zhz&nlVbz}uvF=B6H8y*@nGGJw|};k^4ghDn~J>VbB~YV?%77%JXwodJZY}+#JGR53U{bj zF7_P2$(AHcR79dDb0@09olz0sga#Ra80MnmOJ=$4;)~9$RARHs;7-A*w4`(SQb^ts}!*8!sLVs!13hUryr1y+JkeY@+)x+RGDhYq}X{`$}mh3Q-a5 zi>w{|9|-c~#cV6m9G4+;{U>X=ZVd{Y*W;kwDx@r1gp{RAuy6TNq}kf?Xp1D;$wUGy zQIh-uHQtY>DifduT3RDy;bN5S+Kp&h(*R2|q^);EG}T@7YFk7Qj=L9HBF4!cgEn+6A*(TVgX9KtSeC$V4Y@SC8`K>V=zBi>+ z-2(e>E#UB-B^BCYIL$YJ#h?EZj`w`+wfx8N?*N%VOv*22AogpJsjrjL3Yqq*p!TUH zNpfR+PWG(C^KmsX;U-Un+XUGqUWqS{6e*D1nkd3mDwESkQZQ1=E8Kn`f^0oX{i&Wl zSK=xP%DtaKcBV02)r^TMyVI#rM*=cYNMC|X)pqfBk&rf^nUaN> zoS1+@Rt5!TD%n0Is;mgFcznsDemEd5044BH1%Mj;$~nbiF~>J zWP+-2ynsjE=WS75_l9#AS-5{JS3&H?(F|Pa+NXio(Oga02tyz#b!-A$ftsi-dCziG zwpd{N#bct%p73{jLWL%)mXFW0d@iq$oYzBswtaO8m~7uqWp)sk2=~h)CAd0Pp*E9| z6;6SfSkPO?2_dSri^ocF`$WBJb-G26T|3jDKqhm^UOgJ7BAddi2SaM6zZAv_$jf0q3!lx^9B9Q!rcw`?&|moDPb zMn%ffrAVTEOdzxbW}?tymn=st)t7)Q#B!kmS%Hr?qG&e*t<14^`4U=BzTUwO@%)~F zHj5CrWC-gL`WMVD< zDUi(oY9@(41G0CtjmkoP)L2OY+vmpwZjX-P8c&29ll%wd75yCT+10TUJUm^4o3vfG z#tLw*BNao%foMzfLT$7QDuOiDvN^&H-O1Y($fWSKiYiQsU?rrAUqV(Y8$t*;LQGaE zt9PwN#r72nUJ^AsdEeI-wY%&T)M}~X8bY1WxOXEuQamwI7_2}h5Sy-vQ3Dh&wP*@o zZ?|ib?@|UKAd{M|&x&k>KqA0ijsIM#pvo5%z&@=6o|OBva>u3Qfxu(Dk=q2BSj#&- zngs<3QDXu!Sshid`V{iLXF~F9nxCPm{gUseU@6~^pnE);ufQi(QtHa2Y(&aMW;y_* zr*mf7hCD8VW+YRAuW{A=`n9 z+<6^x*Q~<+6;xsbkw7essw{QcG9=q9RUlK!jCM16(Gq1dBNs14_@YG!UTBRh*DZ*% zTa9o+%g@XhyG)GXYoHGwLqm8mJoF8b>F$ZK+!{A3#{Q|upH~D#9Xx&t1ag2zazxH0GZ^-%>MX){RFbDUqSYZ_*Z~Tsja_~ zBb({9oKa%}vKfHQ#LtRM?rT6M@!`!hZRI3h-R|Z;b|G%^M3*=}n2$R=2_KxQ#C4u{ zw~pn123co@FItm5P`6j=#5SWd(U<=mJ83OFR2!1ijft&njNGh&7$2+Jvli9<_McZP z%eUDokk$IpQf{XrBgo3UmnoR3BcGF!3|Sy(rYe&>nW!?!ksYs%RUnhbaRHeWzDjME z!0b`4ra1LWHTEUMWWK~sEne>xh zC3s}&hQLgoSB>eS)IQl{1!?|nPkEHy%_oG;gNaJqKT)T49T%JU`X-eYLDpFjiE(~U z0ohpsQ$AxE>mv&6(s+exOOkE?QF3B8rS?n)GM*nR!|ij;IM3hj?$vf>E8kPW%kjm% z0R^&~rjaQqL^j4nA6ai?t-k-hGhs_G^wz6aNN~z5huAF^PY!X?(^; zO3Xk^RwqBcm9NumD)Ro-INm%S!ktq!xXP3A#&|I<4dvmAlpauxNq$Uh<)z+(IMb4d z;gTR6&EBOd?q$|ji%fA%->s%h$g~Nm$Zw9>f+KNTX(cwQyqGAl8iGs!)=aC}5I|e$ zOEtEA6&2VTb-Q-QDpU|)l|IWA$SSw3P-Pji$|}<350h9$$P4z*M!RJQQAJLLRoB30Q#h?^ z+}KPln+m>GTABo60&Ib`6!;22<>x-*>*e@zglbTVVdeWV9*>vfKHtMVT1-*a_o<{_ zU+-4Q|BljdjL9AZRFvmvT`v=uw`oHqop5!kT1~uoe7Qr_k;!BXsWTJ6NqyN}J}1`l z{`F2ZVDb5VsqR09w~t5EwsH3_bm98(R*W3UQL601UVcJW=iwZ~`%gO7K&Wy?HW>CpX%0apbUq z*fpM%7kIMVj7sQ-cf% zv-U(8-{VeO=%Os8ia-J>XdRkpJL~q?D|nUr*s3V=Sc(eIr6_Y>f-3Ljs1l1wur>NS z@ar7V5Vjsi_is}hf=pNJRbzYvVqz@?WY^pF|Fa-_{b^NCqr@a}u8A3ti2@V*_grea zB&S6sCN*gSG3n!!kUB6`UO{E5S&bxk2z)8^cyUbX#t5_lDypGkyc(uGJyxQAzPy)5 zM>S)CWXm>zmZ&UITVfqWiQOGIgnRrx(nvnD5FtlVV3I2nm|bW{Qorl1_H?zlG1CGi zKVQ|&@wKXdlj`Xn)t_n{KVGY5kG;Cqfrn=s&`}(W;rcjCw5ISg&f{lYtWpV=sphT_ zyfUx<;l(zk%4DHH?B*3Jwi#O~MX}PRB$fS7?i^KW?A^m-YP+~cmwRz}q7i2X%TaqM zT&XgdiZR`kgWH2Om?+(cq>W3_9_!BwlqWK%$__cLLXLwiRoO~ptX`@>7Qe^>iA$_# zD;E=D)(T{z%;FX;MhtJq+AL8pi>B=iwYEmg$`z>Cu>%ncmmtK#T7|$Y)M^Q~=^JCW zlvx;>!QWyDJhTi6KU><*Mex-%rnv1?%z3s2HqNnx z{a<9YQWTjL)_!XZ``Nm*mj6jJ{emF-x@!4l{5wGQ@ht)ND@CSW`wN);3S{pXw3N^9 z9mSn<^|*NK5N=Nv(?%XvasPNF9@82L$j*1|$EnstOw~nVtRe(Mg#k*H$?9c)mOln_ z0#!*yTar7DB)Xw9#SdXSxpdr)|-6c+dXNDxogbZmizuKBk7$vLe9mgx9aDw(&wwV)KDZQ7nF^TMjDP7=suT}-63DdCJ5tf#l7w?dk}+Ms7ZX)s zI93{nzPvpcI2@oRQ%Emlf9@W%@AFbHljOXBtTk3f^K4MLuGUazv`FHA_gdPB}a%VlBmTU2IID zQrV{DNjO=x7pH5Y70jd*L|~>m5Bd*%f?*LqvtryK zn3O7$db7*2Sx7#5sHP`dlQ7yChm#%qHOhOc3J=fAM!nUzMhhw1!`;7lL{<0;#H8%v z^2u6NM<$8>M{4rL7#?2l!a1rx8H@ey{xMvgZlnc0f(xT{xH3_XwqmMg+RN#dTr?jD z;r~l4M)DJI$aftIyw@RP-7=)CutNH(g*dp@1_$hyA!)fa6`2{WrKJLy*vzZ*{TmTi(}R0*7x6;4;?=&a(v* zstK*~U=_zoLe=V_Y>s=3AnVJay-fE(Pr5H{ri`|BK|>_rC3!L`vewWI1ex^PIjY2d z&33|!$NF6a8f|11?PbIE6{z%Bj2iDHsNc4Xpj(F4z_n-zbwGQ}Msy@?!LdVrglDh< z+4;sKrO3|LC*kH1X$sf$Q;HfAm^~jV(hMmi%-&FSNJw+_3mJh!fJumzlzOqx;F6I* zooVX6s4^K7bdHw#LR}0lHN>enR}+Qlq9Baq?!s{P4i(1^?ZWZW5Y6id92HFhS=wI$ zPF5jhHBzji)QkzlGzGAlLfj|3Xvp7Mj5#bHq)Z?^5Kx$!CW4jp!&Q_5K2Gijgw6{KU$5m z$0~7dxDo?(`*D7t6eG3i=*ZuTia1{axdJV*yKrFhN@TjMz}|&=NLxw!xWt4Ivqbzd zb3`vRLb@HTJnNW+B05vyh5R@?jQ;TuduzZH@vDH)OAOL74d>gqT_* z++s2IP=Q4*T#jI~MYNjB5oERm?zDvd#*492&k}A_RlZuL@Sab#rfo*WWEpQYw4gW`wd|B`~QULE+3`He)=f8jDH20CjJSKDMj{g z1ewH_Ad~p`_Jo>TfY(%FZzqA5BY1tM1NSe~;@0sJ+&f;(D|n$=oxDcXago;L8c&Wp zR0IMt$&U%hM2(G>hpLrBdHf2M#}w^Sch)X+AKb2BCe`>y61J++39056Mb;ebgr=Z% zXxL*vMaO0PcKkG)`AWV6rHX7I!E5GQ827?n#yCg}#G6d~7>L3;i%z8jL9_pXu^&rJMw| z0r7Mu~|klVaCC~6+woymb8}SNO^s9wN9Kb)?$zX}X4;e# z(0H6#<&y!0vf3ykdQ_!8t(G)}KO(#(j){_oeJYa#b=~TkNLT&O4pyYQn|& zhG<-9rgCeJRch&Mz3eN%_tkkoCG;hSrOGEhm0n0*PQ?^$ErBM(6=(WCrNC8QBg#=G zzsgu^0jj7(f$SC9!&9|;7052OCD5u;MScR=ZCcE`!-o~jWPbm{DSoe0)#%Lk!%$@? zCL3cE)C6Sb_&Z4+O=g!#K1^08MVX1clpL8TvS&AY@%)x1A0`QZyqdp&oj+LXkGzN`XfynS%hqnDexY|;Hf&CH4_jEw^ z#uW&+)TJ^rKq6sQ;j;;cob6~IMU5FFd8q{w7MUQ{$`FZ*%n@T{jA&~!?6o#UB$Zeg zZwtucZI`3O-4hY!w38;52sSb&?3O8I7GP`ze@6gArk7hK;iiFKdtmqo+iks3T_PN;5yaVah`Bx8cY>PqZYtsoF0|_DgQ7E8Z2I zyxkJIP9^Up8iVZ7K-(x#tKG8_B?Om1t9CoXcM+<+tx-vkRr7Y;p5hJ&J@6Y2{gGa`6!i>B3M+iUy50K4^X{P!3|4j77HY=b)R21Q~xC;7n%Wx zQqv}dtQti)V{c{tn5x?6YgGX(;U%k)0#!-q3oHemq72XSf^wRlfheM2HP#F zNXe54$mFvTm^~mI9}tQihjw6$DsG}K3L`ZUI6;t|r23S_fX5e`)%YG!V*)d=mr{Zu zFq28KkFItqc-^|tg7;6yRPtYH%cL~p+<>$?m8cE^*;4M@a5>t`<5e^Iz0=J&T9rs8 z7>nM57*xb~tJTYi{6yq=IilESJ&HZo6JRc=+U|;M=hcLoA)>4esldz?%miX-wp3$; zSB!-bm71A?S?m&PWidl6%@Ak16eVsR2s5=ppn)lsnVGVfd##ru!g?9}49u}x--1UC zz(j?KofK6j+sy@-EvM}?R7J6_vy9>LqcNPnC%nEjR%%Qt{1wQ)F~{0(tYH76&M!dr zwfy4C_!mI->w?%BkO{yP%-;U<))MbeeNOcM^kf(>uk)%)HTFQZ`9D*kKz6BTKQ4Bp ztLE_Onpj-x%u;c&HBHrTooYy+y(B!2q~al!gKTthx-A`}RWTSW3`Y9_Uu7@5_WPo4 zud@PK-##z&B)XxUHnUkk7DP1`yoO+MKx4>S)CR0Vm7gujeQ76mEkl#v3e*YE2(TI- zD^zc@Mst8I+9KDYIno|&3C_&mZH@l=?DdXG>MQnXKgXqg;g)v8r|{DyEr`IyBW2Dw8_+-d+skt9Ziq z@TfZr*QxGKm4&I?oaEw8P+f`oyWX=;#a&*21Z1*FuWSe``OSNyMYvA|c#9D3E7*ha z+6WaBRF9`=qo>W-=8+$}etEwF$%?U+cnIzSqkW zl{noeW3!8Kwl`m?GJ)4Q-tVtV!AMI6E*>kxx&9*bmdBy(Pz1_jeK1*(j=`*Gw8r?M z#@_=&iQ#DU_ePri5~SEIRI8b3s}~{KN?+y9_R(fWo9ZB*P>ZuRQi}o63r!HS*aA_D zHL5JiW)TWDZ$^-j3GJk*DxUSzGr~@7eTE^t=V-%sfdPEx>l0*VD!jD`Jj>-sS-S=9 zbB*CnJLxvZSoK_Pnq@*&W}>S5B|oO>$RtPh7c;D(DqH)5HcWr_f5CLORQ9{!>-38+ z;|q|@OurD2y??#$7a)^W%U^>`!HgioTY~KEDV6Mh_wH8-e?m@y?9~L`KA>H=){H0T zYZSzu(pugh&&QdzWTnQWpYeEgJT4Oo*9iqVs!eg5lX0er>PHGgr^|7fC(lG<3PuUN z(Xt41XYa&do`e# z%Lpx51fb3IwI;|cQ0ZgNe{>rvI!Cm{FbJ}NOfQTV_~SS&?up7swaLgu!t7cDt=^Fg z&9K8B0^n0A#FruUUJ~;B?Y0cuIwGTa4*mjs0T$rf9 zXsh~ZH}762kG zsoJbe5l*W)V=+TbP2i`i%jc}Ie~mqYjLi{XNLU%uR!SL$wh=t%=qQN!Y8k_At^uN! z*&}AT6P&-%;&Ub%HTJEcQe&HbloAXpY?viVOjMbL0-4>P&9UZtEd{a@T?E-%0oh+U zpZ|Xp|9=OvpMF~OGsr%6P-XqH{6Zim8|i)tvY+0_m})-Hc+30m-kteJAp7uq6ff^| z;>Fcwyu8w=W{o|VD!`Sa2h_^sXjwSM%4K9uEY3Hl;ST>PVV3P#BRNv1GVU&>DYG-d*c_cK%2EHZO-%n}c9ZzaS#iQ#~+6`+lJ!958e_?okojQWxpu0%|8%gf6>Q!!pwy#Y||WTZ1}+p_J20~ zCCGkQ0P`7;z1#W~WWR`C%_IAOe;de@t(29?H^=er^$EOrbBZwIYY8${M<&m|nZ%pN z19)~_riV7G5!TO6SK!8AHcs>8kUZF6VGu@2!!c1w3)z%{yZwi8r9A_u8lhQe$?ieLqf0ofOr|7}bNO3}ZK%6Su0iBH8i#XsRb#qNK5WJ=&t3(Ykj%8ba+A z)C6Qr5%#!^P88kKqf~r-`FKvN^}Lslchjb}=ip9LCayPR z;Bw7AT&ScPsz|{3vN)VBio~hI;W&9X6xS-_aWXdmLn#D*pgjuQtWdjq1*S50;(BE? zZq>z8sioi^!NY8 zB>`vJ_u;gZn^2M6n697_(~P;6aX+HUBtIsqOj?&@`o+h`qiU6MoEL}dQoxK zX3Ubsw3kNMp{=E=|NRY&ux-8${0vRtJx@=8%-?vSQe<9QCTb^hf!NmBhCC8(KN?{Z zVYcx*#`l_Jzbe7_jyCf<3#|RKDM4oXOOSn4WWNl}w(A;@NsjCzAA9qjAbb1E9NEm~ zBVSreRS^63IHaFaCSJUGGtJ@(TZ1BoABa1?F7};rOy4z zGLDr;s$7>qOhPsrxj#~ft38<*rQMuvpc0@Wd2yy5S9p@2qC&gK6aO+5i)`F0o9GJ2 z>SH&dj@I&sY#tKtMtD)3#ki=b4|7CKupOHBI-w)hMcGTqlg;GKq-Ly*#~NDAI$F-^ z?F&)4%>pI9W~kV0jZ(iwDBQIOeVLvZFZRbskspp%X-XZ=R!4tUX4e{$aI-O4sk8fC z2US8}CHA{CtA3a36L5t#`WAohyRB43ZE2rI^<;mp%aRREMCHg)9v7fVtC1+SM^q&D zJF*B&TD!(HT&qsPEn2ACRmr$nnuzO#akyKaf-40vxKjDcs`Znp%9!r z#J_dMZcH55i91weS4$%?eUNI5HoU=qH754^;0FKh68D>v@Tg-S6=Mb-9cA<#R5>|` zdqV^;VJ1_2?~EMQgtRM7mf?7PJSO;eIZDevTr3MU(P|u%D6+G(mzVfjv6gpaL=V9w zAQN>aTgAx~44Fyx@>&mGUhh()on)Tby;HRq;YDDWe?#dIILrT!^R(eTrL?@Xn#Yf1 zVx(>#&QXP4Jz9*RqF7|@T#F+A4H(al#&kg(8X`SW8L$O)Azp~Lvq0=JV^vp{=dub_ zz8jSyOIvA)2s3RY+L&srB|#Qxrmr9tX<>>GQ{K0ii$GH|)xspl zUHV4YuA`4Vh8A%BaXvyUmLk~P2JW-Y~1Nnw;wFxqPwQ{-PI|CI? z-x{{B*S{w>aOnPeEv;I1I;1WbRiKrl@i*^Q4y|%_~PU zahxZTY|tx(mJ%1bGjX zXXf%BiE&0->_(-|1Z1juKhgw z@sd55pj|p$r>Uuuatzs=S0E+IY(|~kB5(y{G8$WoNG~?UtJS|t{2gyKYLw1x{tcw~ z^~MoRZ>3bt%TYEt5dg~L*QGLFb|tTf#l>=}z>>YRf)O}hv=8W-~-aEWpK za1?Iw1io^3FRt+M8+FMzT^gZTl=$?0?zX1k!IAyASQ3fL#o>4+duiDZGAtoH3;y$A>8@vSSKlFRnM^`Gp!hIa#L4Eo8q+mES4|R=F-w zW|H)m)h+>@fb6V{ccyxKe7pkJX;%bd7kjdBjaKSnS0=5eX3tA$B(INhQPW*TjrFJc zpgX}`CHx!0*P$xJ4h?(Pp)+B#24rDtRGv%sKHXWhTdKP06@U)un2{nx$Vcmg+46r)jq? zl!xJZbrh~u?ZwRoswgUryDdqygUPsB6NR(Ip*UAWC6l#N#l(T_7^Yo58taPgs7>l9 zc5phI?;|e+)0zG_kr{w9xl~-ViUO(IpPId;2>0!&DylpxME*@bo~gpeQ`DDT^vAfOC(;?GbNz9Z>yyPiQ5d6I9QKW%`9iiHW700ofgbOca@1ctnv& z`Gthk_({%F+R4OTj#ousgbG%snaIG*8IawfwUokG39*g>w)?y-%Ipn6CXb!!lf2j= zj7v^b)cSE+%)U%jlXkpyAC4RfzwURm6dXVa@1ebaaqa|%O0+(x{CB_TI+t;GN zXSD)Z=^ke^M)@Lr(=tRZ(nAU@rYN#p=N0G(@bh#t1Sqr7AO~5;H-lr4cUWlXnT`^U(8z;(xaHdvf`A1V}#o`hz@RbIFj3IfjtIf%(Wk@w$H^t#XV;s)# zWS+?1jj=4kFlz@+X79ok0_##i5T-MHF_f?cJ$u)qL)0U!aFhQ^bW$k}#JTXf%@|2` z!^zAYxR4)!vxLOCvT)qw$t^ZjLM-d)vM^ON`{sBte!5r(+&zMyuG7+=t-upL_VQF2 z-kq(&hiM*pK{y(@30>jNICCfnSIVLkOrLZgqzcQzv%ze@o|0a@&J0x$ zd!a2ufow*N)kkhrGxx<(4pObOMZ2JR?*`2dNnvZz97FpU?@VRpK$W%@?QzcNh~Gr8 zZBQVqrlpj+v6isaXboG5meA#B46;GlHWO6&S)th17$w`y`T8}O%=0BMf>nX&mmpIB zV~85N#`h}Q$6X?5F1HYHt%O?bUQ8a|jp2h{7)kfQNTMso6I{_xYumJADM~gQBhN_( zWt&aVvTG?u<2GY@pF7TH@4)#(yKt=}7*CrM@#IJXE)fv7I+Cflih%Rgz@<98J6Vbw zy|lFb8Tfd$7I@H(*H^3Y=2|V@U$4i*>BD$-s+g~>Rg*R9_N+x$=ti8$4x$oE#Ca` zTo$7_%pG;1TT$fig6YB}>~mavC<|Ik za|1$*YRt?~Sxf<007LR*A)?CUK9yOT{aV^aS*bKos!XP1$cDe7%sgi6!gG$EY8v;L zV}MQHE>IxbJWF4JOq7`9$(+B}SBlK>PX<^kA<6#l=E9U9JKp&fWdA7s{W&tKE&@xA zk`oh4`RerqZ%-;)`Qha-K0G~&H}~2U$R3_7rrOF?a+!w2y4Y$-loBFG4;cbBU0=makU!x{K+vmURmRN?LQTD)U?Ak1Fy@Biuq z|GtA+=uUN0lW{NQN8(Cx3~tpX<55Qz?sXneb!ra@D%lW4ZRk5ypyKI7zJi&6OrDno z2~~Q*xYm0>#p#wfs<1%x6>LZU;q4eK+==c(-WZ@AmpU>Tps7Zhi~1tS?w_v1jmdHa zGfmE{3HL5EF90@0D@htlM&=%EU{O?B5- zn}ngtMB3U29Lo+y=0+cyB+V`}$s*%R}{06skK#oIea@bXG69v!Ex z>_33BR3`$mGgK~;=pQNyR#sDNiA-X6c9Q?teY6T)X*l1x52u7XNobs| zPsGrn0A(pqT&*W3BX$7*P}H-8o@WHB3A)hcdF}W zkkth(rz)eR3tozbz{O|@wn1ZnHEL)ti#_#G;$?tRFC(SYrgFS-igrn0CetS_%f=)! z3Y+g$#@$FSr5c5!+KUe2Zts5F>muBaB;k5P6t31p;1<8`dgWf+AjEG=>4{A92wsCq zcMH^bS!0;*{ZxiG?o~(NS!)6wx5eS@z-*v&*8ksI-sQ?d65ZAH9dDI!mcOi+7?U+XE9dp}54? zNwQuN_%e@70CtlW_cB%Y&Ew^`cfJ9)&(z}LL>Wd2)Xu6HoEgYhbN(;(AI6QrLQGIO zwjJD!?wmbnN%uxOEqY0ktJ)Xf-kAn;@ZvUHoq*GIX=sVuiX3OcY2#uXUT=*Yr$uNA zb>oH22SvMOdq6LQTF%FTb&HW^XNk0x=CqfNh_lv5*4iaVv$a5ki55fqGsq+Y^tBYo z0u2qYQ%4Ja`nvEpq`Nh`_dVdlBUXZ^!zo}MUEv-(do$E*4y z0oln${&Nyy0yAl4l07E}GIygoL~>kIR#BVOh9d2e&KTRjoyYa65cWv4lWP2~i=b_c zl|3s(iEU6tuI-5~7&zdi6k0`q4MDaPov~{PG8+Z5roe@04UuvTGgSJTpu)#kMWv4^ zCJwk$l?C8*dAMdZvO)4-2?}JQ#$+2e*#YTZf2L-t1;PBd?*JYO&^nWGvo#JkX*qAp z7IOreB>t~anO>w-nx;A%OLjx;_9bZ8ZG+*&O}JJ;TiKqZ)EFiY;o;F_Je#vH#iNxkBHAKFeEDkf7LbXtOx4w*Vo=JQ8HvwdP}&uC@YM^x}mIX1??1@$m&zWPF{4 zCBm(2;QIYsrOE_k0HNM7Z*lCG6Uo+Ga zWX=9dFrMv$6UBizL%VpPE=uLXWR93jp%6={X#m$WdO!G7izTHDPX`2OX}H}jv0n{I zl%)MNsYj#LzEl*3%LM#cX^Q9XP`7I-NC@$mvd zrtD=CaJddwyHZsC?kz3iNrKs&jI)>44BiwZ1h`7#6>8+}$}-gD+5+`>vV zle>O98=gOEVas1;WAnH3u=NKmWi2;jp_%ZSsT7%j z>`8wH9?GuYNB67gu#!W&L6BXSvW?1ETrSMR$S%Z$JeS#F{8_h-q+&eJ44H2r zJ2eR-*VRtVD2rO8k2o6x9R1h+4Q2fN6vn#FGK9{NZcx|*KkQEa7vOqTOsovKu?yV#jRctsOp5ty!y zz?sHarQ*hlgE3kZgud(@=!oB<=?e^8t6FQSw=Gpe5nKH22%+UT5^9f*y-rkZD``L1 zpd(K9yIh4P+RWA{Dmj6eAHfx7r+O+ILY6BZON1>b;Cm z=V^@M%{r*vvls)Zn^p2&!HlZx5>M6(w3iZ+Clip#y#41xJQ4s>m-TFzs%+@z@jJ?f zw(rO7Rz~AK+^$K+?TR>DE!d0OCDFK5OdD7ffg6Xza6WSvrcyjHO*J}};Eoe%+c2?j z8%Fo}s=U{5syD_ncHmOsUOa9{$AjurJgG^;i@FRvsY=Jga^C0hN!L7Zz%z<6~SEnPH@l?R|F z&xdx>9aGgo=+5!LSY;q4>LS&o*s*2;r;qAtxKM%Y-U)u*XKGd3lI*f1tCOh zc3+8vh4XR1))2XC%#m$pfpWJsC}hOjnxeqdiAvrL`L1hd4QC;H{c>d3EkuOTT&2YJ z8ZAJyi8f-W!e&4w5k`mw8|h-NRQOYkNl1}w#@aPXk?qvdqFOV6@7(!_Te4Jv%;U%T z@S3F!_wQ*hf1st5AjqWJU)q&6eNS8YtsXXfqmT7}(ZRYu>A;>4Tm5_8zY4Oi*76te z&x33xNA}nDwN&w`j_lc^A-sJ_HAV}nW{**sy?fk?H}^X5;(8-q(DumEzg*2FK`guZ z$VMJ#o04#@B}LgvIbJ_{5YMJdmHoWXk*u!pa-}~(wR65D0mmyNF;W<)qVM1~RbnA? z#cFohDu@7jL503m`7A-*j^(s}OVp&-wve^xl0HiUO8|C+YNll8A~c4qrUIk-3YOza zbj5B!SDb9-yMhXCnM(GTZ#PBF4pZ7XbF>m<4YGRarbmbwqS4C~rCW4R=&FmR5L*l% z*ox_*-8fwpO0^KB>c-AB5YSXvGCWac?LQmHB`|XFl79nRSh0#B-w@rZ!CRS=FlMUi+^Of|;mA6F#eMSU8c)urQc z9o1Ije!OhS#H%LS+NxAW8lKi>;C|&k+^yt&DzRtnhw!B5FyUILf!NStWh)?hV zSBX;44{0YA#CTL{jPMnB-K4s_)|0Mso^sKVDHq2ZqA*z-f$m%%^yd5WA{C)lFGtD( zFv91@s2-1Zq~ijAmRLtoUbiMoRm^~FyeS3!Alf1{+vS?<6}puPHSRZ zP#LivN3(aUjZ_*^+|iTkkNbngI8m8|TBg{}& z!7SWNreati%Gye8Qj%`BS^+K8)D+?7=2T|}h*`K)O~Tl*z>uoVoc2-&Zr^G1NHzAo zjslq|vW?&BD1bSCYoLHO1G2Th*C?`?WdBT#?BjdMZGQ#Xr}(#lOw`yfK=#uarOIAB zIR>@q?uS#fl#>c%Z)q!^UT?yaOEq|Qp^_lu)%RGQTC$fh%mT7=&B-e7B{gLdk|TS0 zQf9{=!sSk?HiAqPnSktEb3CRhLNO$DSowR z+MWD9RA-{dDz<2&e6tp+UG;g?LH@>hsNmxr(RLWk_QX`t9vrU-QLRf-&3~>wPL*Rw zE7Aknzo#<=rem~$1lda|Z5Yc_P1v%B<%}x3+d`1F9KgdS+U=TD+$u}Jjp7)UpubZb zjr(PBcvuz>5Jo>WW#gxo9K3DGQs8>Y<6A!d`bZAmv}6-tRAmI20PJRE3U1Y><6awo zUe_T!8aS*r<`p|BTf@nYNHR56ti7yOK9KiDfXV9Rj2gQ&n5mNclGs1h9F0r8sW?xN z4V4F}A&Qa?=sC1q#aRMfa%LlCL29_-bW?&VXuUF8tjaB}jF+h0$7P#1DR{lmM_|<_ zVZ1gG=h_cax$|drF zWSoV*24u$C3StrZ^AV=M03nP}1094?kp<}MAxIRNfwVALsC_U+iS5zTQ?Xk|57E{( z*rjENZFBXoU0Ra9nTM_4YAKM(>g7zbf5Tt26v(7`daFjdKaQEW3oE%~pzR3efmlOj_A*)ztg>3jtO+hO@Q66O2(bi7(AugdRDy;ubU1kCHA036c?=+k9R7P_*gpb z@+b}ES4$IctvUsF+q3a_fR>TgP9^qdf)|;Gqn~E_%Sz=ZkO{;DW-}1GIdG6RE?FtC z6D`rW+MkAtJt<0Y9jgq(al)%7Zx`AQdgD~R~J_n3c@f(TUi)jhdSCw*`q;H6V)lM=r0Y$1=`Bn z-FfIvq2)~2iA?9kDDt#JfyW9Yt~OBj^IUBaW23Lyk!pQ6qrz(=B9|Cr?=n+<_FFNW z7^Xm$w8T__EP0`^24V*D5w15+flL&cM2NmNg7tL~Zfs0QEr9o|9}!`0Mpd>L+vd%K z_w3oqR{GA-LgLbu@Y6AY`*-uO=})ua^2b@qT6)hmP>M`I=K2F|WBvAHRa^ugAYlk^ME0N$uFXS5s<~kDAXGHButD6G9#3`n^TRMp}?7tA>1mx2_|oA6nk1yIW0!j z4uZ{pr3$&-Lu=X|?u3pAf{aS7e47<2cUq|8SILnH$V8C|#HzduP~$F2ObeAR+NgCi zBs6uY%I2v0vX+Py=uFv&{wyy{lmyV`gsVbXsrZ*le^F&J&r6C?#a6zUJcJj=58?TA zE}o3%;NghWWo4-%TA8^o8vx&GI{+D_El|7HdH{C_wcB;H;1vX9Q50^K$E&zqm4vHh zvAAB9h%4oBxKo>|z<0YmQN_br+RfHXJfXUg0gD2$yMvmsJF>uXer7C^w-*Sq$wtjM>*G{i14Th-mw}A@Y*pcNQ#_^{ z3AM&}oS~XK(Q^PNs6fZtc|oHZygpWfGu>HKZ7Jw0jKukt4BYI=!%$u*I`-{A_x_z2 zqCf5`42eJL2LQWljq*o z9N8D~Gsr-QeSkGVw&4@VIvJYHN4}g#CQy?ZWCAkT?(N01QFULerP?ux*7NO?emuF} zj7Jx$@al3s-cgy!)%~i>qUzkQ_F6n!pQv{4mgZs^tSEIz&j_;TCrXs9JkuPfYLZSh z?8P*%^rFTDWU`x3Z-$rZofL&t>AMgmZe}Rm$}6h}f#qh7A{T;(x9hhr;g#14Weh1{ z5Ubf2u4vv@==)SF8K=yO*JAo3%>dS8X?^-B`@mEK-U7T3=bI)KegN6_Qq8x^>jwI(+XNnTO71oq97J$u7?9l zt&u46$Mm!irb}z7r>#OMG6QV{=;$EW&rL82y2r~QM>8c!=-R}*s>Q6tw z=x_czO^%Ep`&!xmWhjV=M3wte6l+Pv7lv|np(EK14dD(-RjHg9 z?PT#LT1!_`l+aSUu2Lc=z5)Or}8Y|{e5Yc6Wtby4G{gF?bga%MGNhWxqwd2afs z*Fk1|#Z^FR-Eto3Yfs+-1I7b*?}LxAzv$l9bX)!RXm!n zrqHU_cT@HCYBnxW8v^q)5lBf+^5JM6o*yq$iGBf_9K~u%NMEJwnxvW4pNbQ8;poos z!tvTLs=5O>-A1+59Eq{|Pz+ZF;8@uns<99pE7^k!Z3#Hjk%VJ)kvLXQ_1&68B}c_M zT%hu0vJ3ffs`IM^w%EtUs7-21zpi9Yl=`nhd9VW}%OcT9cuBIqJ%j%T`BdlC@ff28 zKOy6s2=&6?jYwHdZrk_FR=ClL*$Ek05<5gc|Cr9GRbv zHX<#|v4hIYZ-Ey4=Ic;(&4-_sY+SNjK}=w__1n4F{O38eod$6IW`Tm4fNab6x^Vf9 zYK+#>i4a@&#|7$W|9fq$A1^*2@XJdo!hJS9&jv;zM|Gw+#=e#$>hf1Fhu?+Da*+l$AVLc~q8? zc5?V|pn}sPxI=2oN=i&UTs4*l(!3m*|N8zFIr+;P#a`NAkhwf zf>?nwVYAsp12X#sDBeJONr*{Qx{E!uR5SV8704D6R!h(%gA~0jP~mRO=V?p52ts!Q zR1;qHJE-V*l)5olt*j)pDz_{^t*0KU-E~mpJPTD@b=4}Sm(H3Zfz63|~ zCOKm80M*%HZ=9?q%$g!`p(Tp8ns%^jA5{^7Lpv!D6E!A%lXnI(aJ!#Yk|7|I+4wiQ z(r}&1Lketf5mGnWX*a3R?hr}>CRy#2g#y`GNmfUnNSjw5l~n&BHHcAS27qdF6TU`@ zbng#Pb0-MW_`3&&_(5C+S4W1wIgPSgbBI4?$LS_m)N&cPZ!Pn9j>cTO~=D0q$4C#aF- zCmWKfKKG$L(F487UO1ZKjjBL9Rq)&pw;5%$lTB$pD308S#(n(!({|$KP>E_?l3mM3 zXsvq>2IF2!9xZhajwSh{CvqDvOpZugWsETEdDvz2J^T#6NAwasBrh{Y`U*=`D;900 zg-GLhs@y{IVxq+2P4$(f6l)o4tgF;mu+|&|>u6vmE0?0kBu}Plr39M%K|X;@DY7&^*F%s^eFoWEX;XTqnL8$GOswSN zhl6V3g-pJ9|4v$yCh+mq5T4&^RUmtNy#Zjz)&3e!$P-n2Rq2E%G69&(s}iW4mDQ|{ zG`u`fs$P3i@?zDY1XwuEH$_8s?-|M4sdm@y+2^h%y*7o~qi)AiwL)3A!2pMy1U9BB z4pWg8tkXg1Mh(m=+)PpKZu%KyRogAqNb4HHt7xN+0$Gi(8H%>*DUeAEQjITP&ttWx zky2y=EP+_Pw}CpAY@Vk;CJ+;~CN*Y_+s%{}?Tw+uOm;wb$~qi9unD6D-UPTmK`zz! z(YSsj0XN%|@NkIm8Iv4Y9v%}a0++jeR95{5)NMIR(X6N^X?K!IvywZz(Vjt&WvStd z0x|`$e(Ap?nEJ8^v>XMqhrJqzJ?N3mO?bPHU>lUCZ<#5^pE;VZASM@(7sqMq2{D1$ zv&k|AvD*XLxJl?;?@lMMlGJ;-N5D=}akZy!4ul|ixgG-b|AbJ2>yXo8 zB(Ee)7Hc7PsU8xR86bX%E}^A`I7>pzWFBHn=kvIL5Hm#TLKDQB=^@Tk7tuyqs_Y_8 zro&3{D^*#*{5c5JA=GF!rAX@Boku)qETU@#sp*zzn}LRWUKx`54L~&9{PX#AHIU@uf{JxwwTt^`X7Pp z{rj`ZQho_CQDdUQo;(^<&&ecMQE!q{d-tLbPi{2e*_9f6;PD+*nOK;Mk~=A(-6#ma zbj4nb7KJEVd8K1N&bK5fki9uwpEe%i6AnBg%x=)-Xpj zY+p(hW{QIK`p93Wi*hQnDpvw&y&ejkbg9a8X$J`=f~?Hd81>s1DUiu7Nn#_*w#w?J z7AmQ_N@)!Xw&8ICBdcIk-SaN=wpH=g00R=U!%wv6>i!}sY&v`WTOUZVl(S^ znxJd%3Jj-hpuOCHo^(crGlmYi<3zd3#H?2RdVPzuaMnaOyb2i=*P9h&+GD#nxkLOdBP#?#>< z%?{{evSBY3*pw!@FBcFAv6BL`=TqglJCv)+EUtE^@v}*#%}v4m{tP@A*w4>yJ398e zU?|rcr|ZLTnznMZCJ^H_{+OutN8A2Q=*e_b({!h6!f>XIs;w(k*~+2XDD)MDqCLkC zeZ>)|qJ^wYa>ryv3{F)ipek|$s-rg&PK4#bZO9H za4{yTV$qu9g>1J)NLi(igoSgFym&s+mg(T&DnlIJC_R*f)8YlRc?%F_HXEr_Wzoj7 z6~rW>jOQcXf`B8$BK7AXLT@fYwPzvLl>DSjoq{B=yRS4LcavX&k{Xshs&jYz(mugWhpZAw&Rf6-Qo>}QzG z$J*a%!R{Y)u=4NqvHTA|!0>PW1138>zJl!6p=lal&XDcbH6VNQ!HFQ-PbeLw@)B_U zV~~j&lW7+(o(-#2Oeu<$QVo0dP{{MhT8jli82ygFT~W?0FD)Ul!-ME34g9O4AX^sFrK>|L;F3^5^j>}xGx zzSesYN}Y{RxK0oG_Sz_NBv_n{QA~9vQRt|pU{+3uNv^DU*J88>+ESenT!dJar!gu$ zj1uRZDrEAy6ydGG9gIRxPSSEmV2w zpfzYAhEg3dp0$bgawEFa)}fnF8_aRVG$C-VDhQXTQm!_~t6s}TgE@Fia7YQp{XT+h zCI}7%4?<0VH#2oY8n$JshQLg$qHL%u8~n~}-m5nKl`ZH73nAOVJwHaJH6nXkmVMf= zmyb=BD3FO7dwr@>g=W>VSQW+IIC@ao{TYbe>`ql`?0)Y)4CJ_@lYs8r=S-DNRZUwd zN^GQj7p7_g6y&=1Z^2Ohb_KG_w8&S6veXVrBeiiDEZvLVf>87phN1g#h-y8mO>{%c zJ|8tTSOy6+AMiz+!etr+cz6(UMM>W#jrl0miAuvbNb^{}yvp@3KSY8bhQk znu`NVwUKN&3#ry~c!9G-&RSE%S_gKn+d#nIgGcj#|g3t)o&@b67NUw z`e8esUa!N)yUoCjMm(9wS6he4Xy_4MWv5FButNcuAjH(Zl}$;ifAR*E#M@I9Y6t6S zS*@%I!R4kXoE3GJ&y(b!H;yK5R&`*do|aTT%TVoZg(4??1+v3ywUKAH0LAO{KZ7iP z?E)OOpRX)tp|dVpcP+t@Jxfutg|A`M`cQqjQ)4w{^+R>Vm{DjmAqq`)6qjAd zWjFFC1BcXZ~-8j!s`Q;p}- zrFbxsuk56(9A9ovQ4Q!f7`J;;aJM@Jw>sm|PRo2G$pMYAYm~}7T~DQ5wi5$|KD;=| zX2~wJ)LSr+?X50K=V_y5I_#OQ{g`e^#b^~_Ruq9cf=gn&GETwlNXB+dR>xtYHWq{B z;h1brL|@y$pE{#z?mK9%+_8B4gnk zB$@w!bgHw8&C77WRv&TZKN4cvh&B8csh0DRU`kjSivs%*u_p6rDWz^q12R!%Vl5*L z7AS~?>e5c?Xi=3dfIlNZ#`n-xiXxNM%P4aTTFNVEd^pS!spi@lLFVD-k(!BvYGZIiT7_t@bblg%8Loee)=fQ;^X+~%@E!`){O1> ziShOvt>Vx@Tx(0hWRX7x4sKU48_f$;AUo5Lq-u?%d0ec_>l0;al~UPCf=pD4obWPb zVsPIUbnab;a&N+m7E;t$MI_Oi08KA&U2ZvV9MInJ!WUs@c7V=ijMfS?s3TAos z^9Zt~Xx?c*w$>KVX%4{ydI1e?xI%p5G#%P8krVee!$s!L-9(KdffekpiZyg3{ zHAksxju-pkR7EI%PfgxT=9N7-nnu-=jytqsqJRWs4+p5o2D6kJn}OH^0_^cn-sgBS zd_>8CK1PqqtSM74?4306~qK=ViPZQ5Litqe0_q-pY@l9W3*c8&{A>s2-W5| zAr|k6;$SCK1lpr1#0jPDHpp`_MaI(k$XTY1QhQVEGyk42n}>`gytp}7QKiv3n*M-{ z#o8*emKh>#p&s^G(-vCj;DC(@AG1W7wGk3!>$guiGO?C%<|c>`8>uxPe)Hy2dGWYF zfTpcNlKe9u^Z9-@yv0iXWj3}ETw*UhsK})BLdq>vpQVDB7B+vQt!$+f!zvXfMX-O= zR%*=d@8)6cZ*{Qx?`SQ5ql@ML@SO%^ZPKFTg`d8H?B~#cY>9%HCVr*JRJHy&{?Sh2 z<4@BnWNgnn0_)}Tqj)0|F5Zpuu`zsne+=)R_u}27cD$z=lhMl0rVr!J(R7@viBvhR zqx%V@%pI62q8clUR1;#QuyLRuP$l_a9WTYHhDe;O4#tK02wZNAz`1g&w=8e;C%K?K zc#SG_J+w}T;IKs51{373B23oks$yLvW`?65)O zwnZq|KqcjBfEsU8Wg*K5sj6+J3SttCdlst4D?JQVj!e{;SjxhU1QnH=SWYRBt@SqG z_Yp-#5N@7>5|O_p=Adr3A%@e|Vmj9a=gWL>p>jJ;6?`*$`~d5K2%~OMG9n+Cwnm^xiLbHFcXM996hX*n6!h5GQQQ5rdBC$b|v9n zPpW!fH`}7o5VcZ)tc5@u$@M_*!A%${@WMp-PK*@sGnR=Lxn62__Q~=fj8c^iS4Q9@ zt*Y#Vb)uf2sz~5-3AoUjiQ%G1RK>d~kagwk!I7+8RAup0c%f)cCm{L!L;fDqe0}z| zRVedckAm&1(MXt;crHa}$VN2!u14N!BkZ@Hjm$+0kWJ;4w}Ps9{bF9=jFG+E0LkWa zsl?`@+;K6|7t&f9&qX|ySc2&S1+pAlYd&tQa%JJVb5v`RlwzdWEJC!2A^ZufJ+zPh z+BzzNq!mev%8ZZ4FIw3EM~A`_7PMh~n0Rv)%sLH19_`=6|MTtd5OL5TfaM}`ksz?&}o^omLg z7a6DV_RTSk^1>7$){Ey)yJ;y$C~-##J*n;=P-^VMqYmKy5j8XZ!USdwe%7BKld(Ob$Yk0@sf!khH)$!bHSVzdGz~*n zlNY0{Z1B+cF zAtp-kQQtn?>5M~d#B#JJJD{10tY1n@Xep;FcjI&&)mO=OKIV$)CM)C7pC5|u>;Tnrbg^|mj#tF;f|iPB{Utb6 z5RJ6;W=L42i~8M8=#KP2YrqB+Zd%08Wf9tTuEU|#Cdgi@gEaFw$g$C*I@3p)!y=S8 zE>a3C$&3nZu`UYMSmU4#6`2*)n3*n8E%cGG$OH$Ln5js%GE(+ZASQ8e#WKX08e!L* zxdaofq?Qhq*#ZSIi4X%rBraZ}@?#!<`H?W2uhf_~RhJLdm)Cc?@T7fo`$h{}|MGL$ zg;+~T@;ggKzf8RNgD&ml0u>IjTKP9(F%5X%7`A`^J#_!K{}ZN;xDjODUqSYBNK2Bn zYEAlyN2%-=kiB}n1|MIGBI~0XJBhc?X(y#dOxedtWg*|Z>c{JseR%(Nh=0%#f^QV> zUmnG)2d#K_uNfb2HQ?R(3e`_|j<#Yb(+6ECv>NF?m^d7a<0X-pDvdH$x_r|r_ow(WHr(kxadZ&WfXzpgUATXS{3FC)7aI$PC&esIsQUfh#LpW|8 ziO2o!bhRR>lK8`gcs@dlc&rGoCQ9&fyb!NO3sk%uIjlf7qsX50%aN*VsGRn)RDGS~ z$Yv7$GfDqvqlIdb#X=4ycK9LwA-x`VIx7bN>#sBzmGglIk^m7mkE(LEgrN$ak_rmYp#&S5h_m+N0QI z37WP$Qk^eHp1nD8R~aLJwJDN}XJNmU77i}b<^O{PmAM)AFVdqTn@`21i$g0csNPMG zWU50|rlnxE&x&B9txR30v6cd|v?Ue_WEsnC6v)I@YE+pPcF)z=OR<>&I=YClSV)lR zsVRYAcYreXC25>0;xbwXorjS}HdtAQOOTV5Y4= zX7_i73?nT2yKfc9G>Ysi$i4_sV45CFx&QGeOWw91u$=Mn1wros*c}`zJdU?-2dTxjj}V7<$)?cCN}F7)!3=SJ8(S97e@kD6DpR)F1`LPfo|o=W-`Z<&LJJ;oSFS*=vr=^{6rtMJCf>TODyU9a=Qwfa5Ea!wa|s0D$+ zgBz$~HeoE^ov`1I(^RJCYr-I#mfWIJlIr~jy|PUk!9^&&9HHv^3@=*EK`DmKR&``j ze(|iIitW?NrIcShp-K|~N(qK2IkBr!PbOs@qQYdt?e%s-jP_FUVv?g1klpG?#J%2R z1+wd{dsU9CH+>_@_gJAd)=nw16V-cgz9|&b1aWihTGWNvVlb0RI&ZtGAsnraKu=*H z21~=xk-1BK{*wiJakVi6gE_%S+G2^qKu2WyEJyr$swXESRP3-rOOP}6uhhi>TS94# z2~y2}M8Qhhep<#7=f!C7c0fWWT{YRYN8#mkE|;*lVPZKtfEye=gM+VJ7x+ z4;7lfmL8(btr4hY2*0_y*gabxKHtoT`=90#WEw^0{k<6gSJxH%f%4)yXniig=8b?pB4P zSDW{$ZP%uAw_zyRRZX%e+hT!IXEWri(7_@8V;8UC6?lanvKGtLcP_G)%*UbS+PvcG zP>n4h>s!S!7inhG^YkrOGlIy^YcAOIu2yRd1E{sQD-*%xZTTp*O)+flRFB z*>W#jsPZMms6rd};C4$eZZ!wtYQr9!tK3G&yW?243kEV>6wpQwd15@@7pKYsaHTN@ zcc_?T9FTxYtxghPF9{-v7sq6^QUf!Y6f2ee&jt?T`2aySK!{PDsk$;+(kH|DYH>j9 zs#N*Qs_7M~CJ9YqUv_}nN06n_S|%%qi6VQ{mx5dEG3ZPYwY3Q)euQ_Dqk`8&880|h zemF^s+?DE#BeC}ANOs0Z{tnz9&cdnYShVNv#86o{hKj-z$VPHQsk*k{TGIhsZpz^I z+=DEyWjMTT1rE4apg+zV2UhDN%a)(9jW!Ng^Fp$m_pRp9I#MA!FGaZiUy!xR1Rc9w z(CF@fG%7B!kfOd)Oy}dkLVctPz)a?0pP4AI`G_}~r=XQ+tgAvG7OgK3<556Hl_n#6 zWa>qz&K%V!F3J87DzAX~gxDOauz4C~CTdJT7HMLEAZ;VU%ouy-8p4;#%kwWtohpoRAf3>@n3bZ{J-d8$#4Fm zKz6)c>d3x=>{nrfH*ZaOT*9DK{mB|1-fX~&yGeL`_XzFfH7c`fw2de6>d7cA=W(?F z@a%pMp4{!ghnItd*f2iQX1==Df)_UkF~*y-Ww_U$p{nuw_Iuz+j5GSvyfIBRcDy8t z|J>oU60SIs;fqV1RDYLRRE4=Th>w@~;X>11T&xenSdI_I4tlB`z-3TkxvMn}+Z*A~ zD%!^7dMH_AhJ0HCWG>Ri!G-fR30?v&p9(F1l^&{G7NT^$DGD77sp52Sc&)CgH4~Ug z!EC{Lsn9o66Emb>RyqJ`y{%Bk5Vcn7%#&q<4oaQoE0C4D=%C)qRJ9^CZnr=am0Km1 zTdDH`DgqredD60a>MM}tJAaS5-NxvSwN(j!$&;Na^Thc|A6%{9g&R$KaI+~8*Bb(< z%mP$gsrM()cBmCjv73GA>y?EQXiOLF#O3-(+-^(2Jpo!zI-#YRIQwEaM-znD^8txm zJnzrL)1!HxVJ1^A1ZGeA^Hs@)YE$YtfSXi$*P7$0v=UWQyR4Q9#O@y5hdaGuFZbcm zK$-&C<9;4{k};6whMqJRl z6!>GfG*syBwVgbMN6z34s5nWPqYW>wynYbW!lJHsfP^f z+1PLKBMvRqMvCz_>f%)>Gx(PoBTkB24Sz(<=G7>6T%uIhegaHDmbHkMkpN33pyZfh zqJ>101&AZa5{z^RGCf35mF?A?`w3)Ph~#quGc|*ZkB4eYU70S!5J803o>}u$?3gu2 zCHi;I)k3hYA$HBy#*QDgHEQe+a}>mUlo~UjD*L3yK0!=@>`z(>Wb1!NHTFAN%YV>i z=)wN)v|;yOwG_x~|BDWm{_olZ*|*U9->Jx?{NnxBrtyCiA3utz(5)m$Kg=grciXH??OqqGujXCR2#eEVza8~m$oFameR&^t|l1c zxxVO6-hxW$sq|ckVi!xb#D0+f%$ZBHXfaHXyHuZ7>IF!*n5#m7CaYB?_NFLVXO28x z(Q{U6@v6?RTQ(cnD`-DgExsy?`wp;ECvYBWK$E_58%mBskw9AWlqs7URO^kT3`O}>zpCg}*c z-kOZt1eZYUYSSm{N=tdWQ((s11emBXIX)gt$K9SJ1+s@nQ+a{%Mq9EIiuYJ6s7a!K ztaQ7I(PCfP&P`~Hl!X8{OqKYlk{X#F+f(3&iRvf?vLh+HKt*pwQ^Y1@xi3bp&oYeW z2J`Qbful*jDDzo~ghl+kRvW6Cu*}8tXcuQuS$(5a_#s;=YsW%2LYwu@IeE%34Yd znMBZn*$CI=>kSPNyg(ZPv**L_$GHk*VlQ{iS%3hlvTfflfajlQ!|nI8vGsSeG-{0D z`K=y2zR^Hz24rF_UH&kip#_)U>kwuH*>82I#x%B4K(_L~YGe6-*1@v>tOuLF`wn{l z`TzVCWPdF*5R3nM8rJsF1Kst`u$uqBAlSnWomIK`@I>t8b*irm`1s-^p5Gn7 z<6B*L{kVr}Y(N9DTa9>ju?o-5mErcl0Zf$zsg@#9V=|JuFVzSA`*)x{*&Ef7(g^H= z{=>m|I97x=r)qG$cfXo;Ar<`svXit^qR86zI-=Zn5sJ53AjjSSsS9UepY%tkm;gglP=0O$>a-uAN%i-=P(Ne>*lN16|bL< z5~sN+-8fIRGPUlpL|^O*^v18mXyyhSFL1+&LU)`g_raywUAS1YTS4qj%U;}Xi^1I^ zk+{_oj+@P43TW4xg7`W=oGA8ExwEd6HL9Ril-gvz2TqjkP$e6e8=`T87Y$KrciIzi zmvFk*u@4Wr2(+GTJn7Xmj^FFZ!mT6w)#kx!|IPYXTyII>&x*%Q9&fcJ(Yk6BnF3k& zC!q28ppTDrCn}(cG8@hJK}&)I3U^y#vWN<@Y&Uuixud_p6O$FYFm~7%RkH6v$Z`xH z@=+;+iJEX6$@ayuGHFu_qILE|W4H_ILS$DfX9cs`a48@T#?`81w1!aeZC;23tM6$S zXY+HNg)CmgiX3?HTB)lpQaQH#{B894xf&pisyt(f0sl7$Dbu+~v(Qo?+iyloYN3mq zMMga8D`l2yDy0{Mnz<3utu2sXqEThBCYp(`qR0{~4V1l`}HZVl!0v&|R z(Skn}nI!zBzfu%gpte4?|Dg35WS)PT_gRsB39>DJS^(ES%j%^zHvN7+HvLgsfy{~4 z((&&Ivft=xY~_ERkCn8P06JftQWeIccLZ6i~rzTP#Uxe&57GFU7d`V({*?{QGttX>1uZ* z*?~xA-A@(-U?{@})d8zezReZ|o2`*fySPuR#iIFCRi?;UVTSZit5I?#PG78}cFf6L zC05b|#ZKnPUu(pp87ekf5HuzzcQ!}8+Y;2dFHr@x)$R*vBNw4!s}-#!?|WLSoxUZ9 zR=R;&ghoX(r{-jNC5pV=xpx zbr{aHBx1NI5Ettb z)$Z_>{tmQ~=16qXM;1SW>Ocpa$P34Xf@mB|*oM3f)@n<)JSyy}&5KdyY>7i_bkVcN z3Dqvk2s2||qTXl5lpkaHfiAZ5 zw*Pz$$UOe20huKE1!BJ6X>6r{%=J&SleChX|FA&Crr&ERkZt^(HrD;U7D1+`Le$ub z|7|W-2*f^tZ23R@2>t)^-(jj z0loVp(UB5DdlZS`%sBM!i@=e%04j?xUXf#|ybj~#L_V0Q24px}BgxJX@q|>2jSk|M5ojxo5n;9fVf?3z%VM4ki%`Q8qRwq8n!Hw`d7B*?x2;00w=HUEZyL6*K%KXZ zS{<#~YRRu72pzN(%nE1J7Xem6s0rvKi9#Ym>b&vT=SO>{?Fs~~GETHhenU=9u}HdTeO`=uCmv6&j>6Fh%5)tVs^%*}aQMi=A_1 z<KffVuo`0i1s~AM1ZR9~=H& z8%}?(3;Vy(!Jnp75V8lk{yR_= z8-ZhmxwzC^!++pnbY~>tNMaP~B7#sAv>TOyJ5aXU2PL~aP_*3x`97P`5G9+4@aqmG zVWKb%)5ZH4=~Nr>=t>I2L{2=8?GHy=)OHkkJ0fY786p-fK>P|?3a2Hg+O}CmgP#YQ z1Km;O>x2Rsb4-ZkJ6j>w(HI9;=^}%+GTTm1EfnOhHN+u11LUrjguf-qTo$98fGgdy z2$k+OsPhq!EmI1uW~()-wwNnWNdvmHI*FAmBFqY%7NEdETScKGmD)O8l&;f58I?uF z27LuK$+5|6MZHN+XRF_048}O%e2zEn*V9JU(pt7g;9*z1Qetawk!}A2oi}) zm7%y=6M-A`F}T?fi(8FxDg_teCf}f(fzRw2gbz=DZCFPACmtuC~YPAykhR>_FZA&8U=7;3fWQ!mJF~ zoGghzKfhPD=Rzbo%txW8j2WkL_FblOXQNpWRBgT}-0ptfejJp^bQ z6Kwi${rxO#{nLDcOLAlS8i@T_A8vorqavGu8I>7B@?-1%e!fy;>wZg+{YIZ*h_!#K z_g6ut{r{c;nGZoGDWR_*Q=#dv{1wRFcqouLY5f*%I!4$!&jOo%FvR9LhS+Aj6j62? zk>=)u?Cm>{wQUN3D(H82BqcOX2;$R#G<3rFB&Bwxapfh3{1{3!1HQP|LZ7s4LO_8yNSK5`@NVlDj z1FN)=v&I0@Se#3kW!uq$t}(`8M{^XcXE^f&qJ6FMSc)1?DzZ-?tM^z)^+w=16MTeO z!8#drtqG|~6L6KUrwU_K5@1zSWD-i5ZO~B)PJnipQQ$;X=ez**KIZ6;T8nG6gEy#V z?lni@VMiPubtmG{(Ii#o@MJI*_j&tae+nKAq^idr@cD;b2?~6Vx~18i!28tFbgNx< zY>HG+lhw^@P0_gC9D}QkQMgvWm(YqPG~+eui*{0!mA=ks0>?;sp24v6!}w; zX|{uFJG330c{?#qWhlEK$ws@!%VO00vGP5(IP7VTd=E1m_FjZ?KRYx;Y(aYhFMxi| zDBbReTo)^wWx6;>gQ zh)_9a#6r$MBQ?<7Xmmj5oO8}O=SZ@fq(oAra3$5C<|Tb3wsJ!|cY zYEoh5{q{WXhyJjCw@_6m6sqq1pS8}}dmmcPLnR69PJ~R6ZHq;)E0w}(uQK-wu{h6b zO%#{8!?c)j16ltBw}DKGOe#zv(g;qIY68z5(u3A1&WWN}KSPo?Nq5Kla2I58NElAq#F51$4QM3ZfGBsFJ-GuGa zyRfmY5j)#DaAejT9GTsRy&YZH*V&0PbLZkRA$MW^0^C@-1UGs6cvlCuRFq?LwhY@U zve-~ogq@95*h`ol>}X;%;COcn&i1u)RPM&b{toM@eyAl&E6LHZxq>5dD{js0z|H64YU}{uJ_SS%r3{J?joF<9ygFFPB#&7wSJsb z4q79BCe%*xzO#JJ70sp1EXK9oG}TxMUh6By>wQ#ZGn0f@2p2m141%dENEH^O?F`|1 zd)R;`kST6;hH;&C^hUei=GLyY`*5AVca2mWv;L&B^c5YN96M75Aa``MtEN zR9uYz`Svbb4ESHXt;GPTt{=WnNWRC{;PLOMwEq4}hk4}d6Iwq~*Nv|pvDHecF>BxR z^%K@&NI7gDeE%9gx1|ePYNp`I;xfFa9nVkA#{ic=XutQbt;YALw$$b1_iwDjHwd%u zo?n5loLY!?Pt3D~*e_jLfzKVAhcBMypmTxGzp)Mf>E3>P>-=hbZr2Qa_PX7UkpL)gAcWG`HLX??%h7Kmdny* z=*>%5x5{2^nBXmv6n|N{w-@ zy9sBeQ^8diW1ni_nksOnO*=wYV1IoHU$+~tFQ1Job6at?ry8favN+LRj8pAOa;?Rk z1&q1XxT?{-GlPpAX`G*)#@XhCsWOGx&-x%vHghEJOc7#5gjoi6`^(K*s#&ATn^dQH ztv5>b7N%W{7|663aJhvRl1Bl|Kt`*1z15E^O&(m+VgVn&)a1t1RsxL{>Te2tdcvS7B^3HztgB$qzk@?tEH3{eWzF%KmNA*1$Upqd4clOP+U7dw79m_3*usP9EZyau{Xi@ zRu{&(>afA=T5}QMR+LqWLVn8OCD4Waii)5kG1is9!*6y5DDr~84!P;Ufw4!Qk%GP6ZMFZ7VBeqvku~jwT zP;)22)P~)>y{)Vg`|Fx;ZpJJ^svR3M#n_a|U}HLEyEE^uB$#UW9LB*q!mP0dN9rqZ zyoqpXuBAP!!0s}hNZNBSntArWBb#CRKK+D~Ze9DYKRu{S|lTmf-IEGOGf( zHe1RqVs)FcoY$3$MqnvSiM7#o4uVWj)6W;`3UIN$5LcVMxZdRDV?Jv&q?SXLq)Py* zzuMQgbmGr0ufxB5o**M=e)6p|`04jA;K$!PgMa$&Dg5L2)XL@*{_cAx4Qh&i{@z(W zb_W0O+kEWXCkZzKkjEcU(fz|WPv9TFb<*M=zOH;Tf@(1DEC;fGBBcJFu=)o+X3zP? zas16Uj?z*d!=Dp`e@?(@|A4>w>Pc%8^m|vn{tj&BlH|M9|FeErxW+lTV&m)6jJ?!pi5Y{Q+6?KnEG)Ij#ltDEpm!tJ_tf~UHB zXXkW$Vb2WQSzU|E3(KkgX5foE=iug|I(&9j8?N;7^B-&)aIDH}{l-qz_-)=(b6!f- z*b|>fNQKN&UaF5%jnN{e3vKdWO6+QLiG@}+cSomTU&4j6)hR+RjVq0nI8qeF_CSGw zOo_9ns!MT}=ikB747RGFqQ{2~!3b8l17R$Hq=%X4V#0aul{;cib>c>w*$P!}vojkG!Ap0mjysyZ#EgV6n z*4G5tx9;?!A@2pu3kh5qbWc)ESP;FFqv)L$#cWp`^ZaS7$<$(XvI46TS*(ngTWl<@ z#twn3q8{s$w2@`i2C^+BmDrRnwGB&8QMH|>4c%W|W4q66OeJln=DoC?d&>Eo%2FJz zsle%$2JFk0V1IdruxZ4rbGiwhW*n|6#&$~nEyYw)tyQ)K{$Z_1F|N$2vkCu$JdqF6 zI;u|ZWMdR(d6Hk8p0Npj#pRA-LZ}qiX7F|=6>1J;NuTqu0 zzM#yuo;y#QDJ7-ESxxLqok^Kpr1FyDG8NX~A<%-j(Hy{)daAQVDzYZp%|-_AyV?}O zmF5sGH3q04+&EuPyV()NoAa}HZ*`*q?e9LfA0K@49De#8l^+pC1k*o!R{%Rps0nTi z-p+;Y%f*kr?Ep=H`^WE`#{d4#8T|8a^LM{}%3ka5zI+V-_%#CY8-yJJX2IJzkp0D1 z4pNOB!e4ytD1NBF{q3_>)2U?JD+6U5e5T;MEcKFVe0k3-ys=?At`1b-8sm*s&G`1g zMflFi71n=Fs_Q@B+l%jB-H6vVcH+dmGHayx_OZpb+3p*=yK#A0Io{vfh0ktj#>IJQ zn=kv`iN*NV!37+sH~`Jf^6$m**~PWA=u}oM{LZMv&el_XHAJkU<3!ej!^MTT*;jW-X=2R(pcZJXt{yi>5gsQ@4v*7MR$dw%S}K;mpBiUGF*7fMIfU6le+FyQHQ1hQ#>S#rtc;dneWnsy%j>bJ zqzda2rC6UTHJI(HtR<`}2(B#lRMz2eV>6XkEx}ceEvXbXC*#yg(IKXrC@nu?d{oi}OEUT7|!PXFvYs+o$nw z-#d?g`R-Z#+wWX3IORa~FTcb4fA@kx?1$f?()t+eq}qP`{qy+O@0~N4nNs`4DJyHz zYyR(VIdD@5WU{IP;otCeoL!x0U#a5$hAQsE-@Ao(w{~Jr*(BO^{?AmB-`YPHU)(Vh zmw5Z~>|$K&r}`bJ!IyXU;|CYl;}33b!ynzZZECG7q@lcYrE&*BCYA)%Z)_@nUA)z5IchT*b{Z*R9OnA%Q;BZ zlv9zpur*kKb*@R+o1#Un<=?9+$If`dtfds$`asmml2&tN_rUrm=gk6`7={YnYE0j6Uxt`qri{Eh<}Ga_>xmJ{!BAtxG6!PH@Yg0JKb~vWvS#wLw2+zmAnO?ILHC3ZW=@IO9(=viLYU`{VJU6q z+H@7x7u8Uml~bLSVO_eyK(;=U#fG9Rwh&}HtLqGATT9C=w7tA`o;g%g&BfqZB$paIIWSk zGJ^AMCA5##R9|I00jbW)eYnKY`DQo4)m@2ubL#NgY##fo@mhZs)m|l`M6fZg&B*X| zg1FX26*iL)V<@NW)&3G%OSS%~!RJ=g(ym4c)R-x=y9;>#;w)H)%MSX+}{yO|MEK*4Q&7W`{yhKGQsXX^aw)L zYN|$4uc7$g1lm9IcV$DRFbxpWfU=l^dkB%j5q~ zd%1o(-rv}PTMIZS%r3!gs;A2w1a2&Y_}1wa)&b?~`v>q<#@9})!23s+ z;G4YvTc?-do5$wkwDwY1S&a+*NxaSh&)c(b1aQEwLe zi>6_3dK!*q`589Et+GQl@^nSWQZ6plr*XVAKv+$}&hRu-V9NTxP?xce7&}7Ku+cRU z2a;5FRi*sBVjL|_5Nv*I@=Y_C?axFRF`TKd#-3CfD+}EQvQ6OxR=7h}nxv2#lPXiO z_#A?34hMe=IvS;3Sn@0FWH*(V)L83qM~$_N45Ddx5Oq{!H81&4{ep{8V9IP}UMU(! zhEO+dGK$B2lGd{Cfg=0W_&CVuxiv@jul;5%E5<*GdBK!pEeS9cwswsRQ<oO(SQl7>3aw;-HY+Jb|_OsYoUSc+KR~e-| zLm=D5QBkqCB8>x8MYehBfvOC46h|!fW(BhhPBfI_P(>1lvq_xb&u94a<@QQij;v+- zA1vX?+CbMJt}>WuL*NUY{5#6}pPj(#^NX$ET#Ey_+_G1DlDO4D)zZq_ zRC@QiQ+TyKhC6Kp6&2a_#+ZTZRB1lWmAi1UQi{z@(D`w--m#yTn*F?p-29(;fwmHS z-C$D}t{?Vm1{5+^&s4TDdrt$WQMto^=7v5Z6 zZ^iwZW4ua`-C9tI+shiL!kR2@Gu~P~9bequhp!Q0UpzQ~uN+y7FCXHOs_t`}rsLk~ zdYtGE;WjPmTPqv!`am__SXhsnGs{dtAFJ?K;{bt7t*iyI!=+wJqfnmM!IX!{HJWGVI*`J4UI&p+zC`-R9}6X8ylyUN+(o`q$Jqx(Gmu} zK})H2J;A}c${?y=^xg+q``9?0PX(Grg;6_pl7Y;28vkGc-P40PvX8~D2brv8cH9$~ z?T=H|rqRO@rHfyLT8&sxE_Y96O!1;ud-ZwaSQ;a|sKnM6Rbg$0KueVv%vL4R2D9}= z#n@O<%FvPOtBfkEv*=@H zQ5?d~B0p_Kj3;#h`!WHJ%$h4H!j-lPTxy~UtBCRhB)BSKIA2SKq z8C+^h+US0zD}#&eNnGws8py79r>Wkee4Vg``kD!9vYMJ`etmug?k%jq+skWleO40Z zJ7{e>39er4eOZP#2C_D%rdm#G9YmXWr8$6W%|Y6oI9~70Slr>?zDtnaXo?!hPM72x z$Szg5aHcGe_R}*6Ge!#)VyjX;obDak0`F8iK|3dj&u?zSf4jL6|N8aQ1~kok{mXC5 zLY}4aI&T2WK}{f2=(Z`iL71tF#y<;Gnj`z>QR{f2l}o`)Ve@U@AmF}w-0CyGe_{Zi z<>zp@$#3`CAl-}A{C1n`_P+*?MlEp5PC zn`aQlOY!Za%kcKr9(-ZPY`n3i1-F*e;DqdTF9(~xEY43)+I;4v)-?`r4AU!OTvU0zsss5j`K0K_Bmah!SQV3euvm& zB|P8aL2K=EARWa2b;rbtmiedaH^N^D!^j86oo+6PdhoA zF^dAAXN(gw#t>vYT3w~BR0?8#vz4aAUi72t1sw^qm)w{!r3ka~%TPPihsu%TkRJUT z&Sd{j=HWpbpI->4JM4Xs4bG8$`_-8Q*;D9oQ+-WMp=)Av5M)mG$~Jm@Z6ew=iK7c) zHme|ng`o`Aq$;tYxEkw=E3mGpoYqnbErXTu6dz0Tu@VMPgrW>K7Nx1qGE`+n*j|>r z4>Cb)V}hd{PoSNpJb8GcNtH>3Z6~ZYC%xE~@?le~z(97owg?9@DgyT5Ag#iQ3R<_; z3S4Q)+G>=_Q8fArXcuWSv|6S45%qA_N|$B&Qyraacb8YBd#_<2u{K-)rzd`v+)3Ur@T; zo*=}MJf;j}I?7tgYD$eM&X(une1-G#rCK+x)O&GFb8Lj6UPEoX&nfj|2BFp)!|RJH z@O!5gy%AsEI}>lrEhV7+&USoV4$STn@Sh`u?oo*e`nTtn;X0ppv9H+T3O_gH z>1nR(JQc83Bj4XX+d%fY4Lx{!V=wN~N`7`-CthFHjMo-5;O?SkzCJB}UmY$qD~F8V zd69?enyRa{)V||gkvtsZ0C!TGi6m$rIk=rHi`#u?DpGd8tmMfozbl?2g4!t#l1Iy8 z)(Jx}JER@PBTk>PLj>0r+DgrjX~*$BMG2>Hoagbz5C`r&H-Ao=DwD08H?a`Q3Zjg- zfov{qq}13i>eUR}(`o^ohC>irOy6OMBrX;NeuePYN?v<3swhQuj zH##T!sLnjLOY&S-6iY%ySP_#F)7)5vDY6x@B$kI_SRG3^`D4YU*hH9ZNF}i`700%c z6jfN#tmT$;#1z>Uo=97Ga&1kA%uXJr#XMHa6P94pHut*-F6|DzE#@*scC4HuE`jIt zU=I>Hw26e-+1iZtrrHtB;|b}uKJC}0SKwAxjqR*+c{=S6RhR&#$$j0v)mv{>IGS$)uMOPyV44x4JbGpCeMjJKE8;%RE;5$cF;CD`Mz}F8g$7^e5;8-`G zyQl@PE$iU#H{i7a!mPav7x}&2m{Ds@0(K_~ajm5srz;cKpY&K~3&BgRdX5%x0Lo@) zD{0-U2~rM*O0PIab$_xvVacz8*rC#hflTeLcgF(Q>?^1$L#2iij{1$OJKMY9er5VO(#C8O&}_xtThvmjX%HYNj&(-(6CRH~Pyg zO+#~Nf|za#Zf`HD#%-#S+^$Z7nBrm`;X@eR?u;{%xJ!7x#`ocDn&N;?7F4iPTyLR0 zCAb8z8;ybcag+C-sZ>3oiz+guem4j9#U`-XN%#=v0%78z+y9NL8;tG6oj}%$4CHZO-WaZT< zEk#W#?@*bk65>{G%H|ZcecuHtwu{}e#2if8_*wDuR=(aP{_nRJHR8*=2JpQT8}OY| zoAJec%W-}|Gd7faakxzzCO6@&Ir(>HqSag>A7Cf_83)3xSG%f#Ombm2fe zfc-H)j%tEF7R1f~6?rm*bCsI-&lHN*|A353;Y^>_T$bXVB%MotzYRKsJ%;j3Dct5=ZAGDzpiH+f-Ej#=Dj5$1iX$ zW%UAg5-UQ*gcVg;ssgJc87%d2r1FKaieLKrcn0fYX{-*%EbU@PaR%Em&T(@hMtBiq zYAvji5RQajx0QD`oxeXAQeBrCRWqnOH07VsS`ug%s|s9oNA;fCH9wun0lW5x7Ro0ch4`w zH+J{pbF|f$n_X5&uf0NV_NQPScV{wss5I3Tgb-7&H`!m!C*JHy;??dX?oo-|WZarl zfxAmuaC2c3t}brFJ3AKPYezO%e0J+X+#b1hDzG_Rzj~D2aF;)#^(Y##+}DY$p74`*1dmL**Q36G5!=d9cdk#Y&ggT3QQa%L}}gg0Ufx!t(qe z7EJOn0<@VS^oOFMk5R|NeZ-?El$M9!&OsECewf2kAa&Ex&fV*A!U?znu1o{NU;J zwclRnL_v)9a+3Dn^PAmNX0kR;m^meae#+{3g>gcw2&<{e*2T)OQgaBNu*IrS92*iv z*q9{f;wjrkYil}d}A?fViMQ8oR!Nfnx~@b zy4p^))s?}kykGFTN!VR)RE`%F8R2%O%11jz8`VL@Aq7WBeQrS|-X5s3+%JLbb~mje zq4HX98lPWSjk~sC3IWIaWF@aO2F)5?kmal?AgqFRaog&q=IQtxCCA!6oehFt(3ITS zssfy@oJMt#XK}fbHnh^2Q@d27RXZ@cXr{wy|w{AII|F6-O*{VI#o5v zHa}KQovI$Rqq`N>s}9u^nC8!D(Pt*`>O9)WSt(omu+L&fiqB8u-jXKV8fe1#zG}R& zp%1rL_u|dX3-JEVWq5!4QbKt(zP*19?k?@6>TAV;nl#>8G8-rAO0dbFN41;95uPKv zBR)%;*yb&?*d6lmSb)6|Kh9QA*%4y0m7Bd2t!0lCy(aVbQ{~%!mQ-E>**f=BY^23J zR#}4MRi)U?!F83Zz!G6qV<}5HcS4?{$~Z``52dlZFoJm#JeGQ~a4PNPL|V#`KC_iG z?t_e?U^p$~u$Y0YX;_rd3ZrUB5Eai+jXh6by%0jpOHN{J#dC#ryK!U;)uW~$r0y5* z(N_Ls5kCB&cJR9Wb(h*ECKv02W-Tu(nYNA=uQ`DWH6dt|6Kz2!i)5V``m}peh0TfC<|b5Y zO0{^srwDJ&$>OaARhFV~vd&E~5n7!Y-0e(T*8imj7tRqr=c=i&sPwM!@7-)o*$z<` z_7yih^As7LXF~8C72x^lLHy4Cx%j8I z58_|HauWaiHLXfgb$$DkDYBpZ;G#iIAp3`Jp2FXKUFA#y+G(rJl$}%o`d_@e%OLib zZ*IZ=&=!3c7vj4Idhpi#Qk*>a>m?ru&IFc>H#$b>z^Uz-Mcl~N%U4Vfp zF0AlIv6h4NG8f@C(L*cgVtB0ISl39eGr@23ViB}ZX*E-UwGO4d9GRdZ3p1jqq8h6d z$QX4m(N>O1TH$!rvu?BwiyQ2Uhm3~**+G!~+rkGR`*=9}Sqfy5sWr|7;*SULl^eZ? zz4RGOpB6yN*f5$#I{WOkkLRfJOCXy*Laj*nrD>UYLJ%`KBF(2VTk4m^%wVxELWl+L zgKSMSWpiX3lNkfqmZ$?VLCk>}6&InjIp(vuu-!!w>?d>%YyK;n;LqC8#*Ix8w}EV1 z$d9c-pT%w}xx=NJ+ejM71h0d|v=3z=0*tRmkZB_KKsshCQ<_iHK8MQozSxkooqBRx z?h9n+YG@Vf!#GpnWl)LLMR*M0Sg~sJ0?x{22i4k4ZPv?+cor3j)J9XlChD~^d6)L- zjd>Ne1Jqe6tK(HJ0*98BfYNi6`L8)JLF{am$NtuNJ}!7(ZFHb^vn^pNPKxYIRUR+M z0;|=OQoLGA6{IqqFe#!mPa?tz4=X z+r7cwZRb=(uT@NS*`4i#a_(d;rOXt1OrM>0w|aeUC2rGVs(;+2o-!O)L4SJ@uJ_f@ zCO6@;D`w#OyhdvZaBJxdytjQNzJ6d6-r2AiyQ|Y!NoBRSI%BoCcHR(Z2a4j>%6cyc zIpv6*uTfLQfF;8!4Mz(=T9wp<{`QEPESBJ~7M-F2tatPNbOHx5X&wo>Oc6F|+czq* z4FSR~62+oCZNy8k`KZ={bR8~rfOQ+l)CE?3$CNK7kXbMO5dv7)f!R=XfsGJcUer*5 zRXpo6nCZ5GY((6dLwk-w;+3e~Up!>&1Cafn!U36X3uOFY20`|vYcmje;Zsy(ezc5< zqEXq$qXL+&?W!ik%vx&BOk2Ba8Ch*eWHD8C(KFG9zG-1B@Im+lT>q05gY zz5rH+qgWHuTv-b1ctRM=WHIBK8;f8A!L)&Z+DQAjopx~tVYWxT)(IzpY)^3*+Y)>{ z?85eNfEGa+*qXdmZJf6Ia(YM!W||w@m2g>Fh86%cCnAt(=Nz4|2U8(ihF1$0<(H`r z??g6WT@wVVbK1d&aiY}4@DMPBUU?8lGj7|O%vr?@T29wZst*;HYko|&@j79qjQ%?_ zl2mMjoGl2%39tF$*@jQxi&O8>P+wxW`FZ}!t8U~@ZYJ%{_Cxk_~WZf@rS1u;0w!Z4P=)I zRjIPq`TuK2cPTP~Ov+2Zy4_zy+gUugTa^PeJtn(-p1-SdqdR>SxYAvWy913lRv)!E zPEcQ)nZ@UpcHp&vR$QK0hl{ftso2_ZYf&%0zH1%6v3or(_qF3lOC?UVH()EFwIR;) zf&3KB^f;(e(XGmx!a+}iUyA2b z0{e@Kc`jwFSbQ_j-|fki?KD0x&5dPLWI2${Cdhim7GmajuVwNpXG|b#AIa-vIIojI zkTnrj4eB*Ukk!7Zo?|{*$RHYCi4j_~k}o^$eCmb-?C~r?SMtI*1fS1Y%LQ~#59Y}3 z$483Hv6dePS$N1N(ZnxCmfH0?=_vN6_!?m!_S3!| zDGJ*Lt|zlmUX%$!jjE|sTg#~pOq42!a4YfQ812ZJY=j^S^XC9gmGL5^YSU&WYAa)^ zjEY2){91L)<$T?s)x1iWNs(!f0D(`*uV>2$8$$DdcrFdTDIR-SxW?Be#HEvuaC{8!<_VfVWTi=R5 zyRp$00aOiOeaO_hM{{QcnkB;$Wa>#KkXh@WFYYJ!_TjJI-GTpcZzKNf)iwAp*O%ju z&n?3H%WC+!O)-#Nw>d$otae)AK}B}4BSbh+wf4ju6-I~&YDyed4xFkLl%J=(J(Y@G z>PXX~H*sJnvmM2c66~sxz1UI0&rsU|Hsbc&R;spoTr68uX z3#qZT;e^wmwQL})>R#}p`dP0jFirM142z<9coNk^{02F7i`8=~p7o&YX%EU@o`}ec z|Ly_EetoE^;;(}2%h!8Nk=2hYK)sfLhk9(DtVv0H+68&MCjT9f$#N=5cDm*S#;ds8 zZy@W-^J76Fm6tO_|GTdR}|o*aVN210FZD1cRdw}EUkN69U5 zKUEn)RuaR0f=pq#WE@GglC&ipv|VjB`$E_j zc}jH5fovy7-@UXVsJqr!O!d+n z$4%v}2}0R?TqrNVd4lYGDSs~Y;xb`+t0sfjo6B*hnf8l7yGo#4%KC7zoFFTA;Sxcn zssO?8csbQy1Hsthr^0dJ-l9tU>BY79$9E6mZ{OZykow{K2duH8RxOp?|HCiwF{-g2 zefc2%<_mg!AO7aOUHD&bZNY!Py8(Z4V>$ld^n6;&N*vCNx0P6%7v%pYg=G~D?XyADSmrlqxFWn)?J3z`x^+uG)~brA0wdEb4>NJ zXPYy)+FgxnJ#~0}UI$LMR^n_&4bF8p;{2=@eB>wI}JE?1S~WSP@vOw$tUT=_OlA&4E%mUGY}012?Qg)XejFR)_q z?QyjZs^P#|f`O@dR9yuepo2W8lUPiU&6&*epCIcR?Xr5x4i5gERAU{(gP1-vXb@|B zk)Rp`S=BQhT1q9s`Y9CRXdaoc70XsF3{1%IF)zxVDnQvYE>sPljMyvx-dVMLP;2?i z;ebq;{U3fv!V6^d-wwz=Ly);pJ0f6;tYNs1AmgZ#1KFgAqt3?gXTnTSQ}%xjWV5FR zsK8=a=ynvDtmR^N0870AtO#fYlNK`&8H|v{YO1SMelI~ryBHy)v~emSqg*ntXd$h%go;ie({j74#1X!RRM{>nKDBDmD%XCF#%iQ@ zN_Css*fr_Jal-0MMI5KIF$33Os=9-5500h@Gum6-ca9gBKz6P%Xk|?*F2BR0l-T(i zDylkyL*WQc2d3UG5>`!m6!hbrm0G}JE z;2es??CHGvbywY>C1I*+qU9muaoPu)N*cENLIh zH|I9dqL<=K9S0GD>?AF;j;fW_j!9>m2%`2%T%jU6z(L^j^eP-{ug1aYmAEj_jW@Th zz?Tnh$CnRm!|$FuiaU$vVpEdmhf*>UF&s}OajGPP3-vXGRw-eXhmBqr))Y*$dDcCN zxGDQxbO|e`DOm6I*#^BwE34@avRLM#BAe{Of_yp;LTsQQYTLXy-7S2!Gg3PT z|Mp>YFUkvhg_e;Jt5?TYsxE=7<~g6)ODVFJQAso^C4=^}V_eEWmLtwu?e?IxHu2d7xR*|98b0xhN{ z`vovf1|P879QBLiI8{ztp}h}NRAscIrwAE=>u{3yMF}`6L|GH5GtHSvm7P_dnUZ9C zG6pg!GC}MjtKC7&VoLgPDih>u`f#q8DlY3cn7!7L zz}=Q4?$pO|h4-CK%eT4Kb*@6QlLs*F)$o3~BkeT)gU|Or0NJm`FQ#7@$o_Q!-n-HT@6*45hVgFHkBXpy9$yXKnnpy> zJc{rd8*=i?#zst`sqnSYQZzhPP~JN^NLA*?{DKhX<@+%&&xiT>4#<{MIjvN8O)9eG zp1^&OY0g0*Ri;?sbz@_UprW!;PT9^(#O69=FL$Y_B5mg;TG7pXEvd3~+P0n`)9RA! zrIyZ>p?$p4ne^Z2pJd0Q*|@D%N}Z`dcqf4=m`Rx(A^6mf>To(}WiHy>RSN8gY$?^) z!HDN0knz3?)iGNXP-DN#)04JmrmW?y=~N<3S}Z8Qnc4!IGdiQ7<NjHkGRDVp+g|c9ja`F74EtZ6&x>o4_UA&k)Sc6?t%0^L9m4S|tP~ zpMR~Aimsa0vo?y`byRdzX4h*8KEmvLR=H-hm^D;P)dEP+^16Qa=sf)8oh^9DJIz}D^*cLk(*J+nU5`J#vK(Jp*=UL^XDxGz%s{5OK`Jsq zOA1U76U?N@WOGk95W>x2Txubx+tau=uK{=GHsU0e;aacdMSK-KvdYtWR!-ctBRAh7T<<0AGZ-B~7 z(-(#LW*?81m74lmTUdbQQzjeaG~c=}mB!9U0vp_ZteBEdMK%rd$4KQBy}#W8nU)LQjulD}(|g4YQ_*76eF%nQC>0GZ~;WF1SM$g}#&mQe{) zX7xiOm@&DG!XS$5a~_m4YKKR8Ef(4?O26~&oChHL)o>DGKO9WIun9z3%P(H1>!v1?Tc&t=nf7K%woslpC}o#?ictiY`%zt>LLqGVFokfMtcNdEO@XH0%hv z4Q7Xx&CS>oabbVlOMubR5SjwnftcGAnc^tb+Zigg^VulvWr#{g9ZJKNBzwCnWviB& zBRgM91yRRnq7rJ=JXH`^T6n>?rSL|3#wP1e7Q1mcHWlZ}{CwR42WSMZZ1ZITnBXNs4Xg}{?P&a&8s``KW}WpU)|k~AHBU7fAyA9F1F*(-`r~RVt@YTW&@dye|&Q# z{^ZIE>wa-CHJ+d;v}Tan*+?o&t&g;*agLVL{^yPuZuM$aSDi(YRu!SgRBx#yviz_;i6j+#h^nm6Vk?!F=2~|~ zlGqlEVI9xed1EGE+0+88^M zT7E&9{ZwTS+W34t1TuBNsKn3tp;#aAUjkXpaDI^dP*pO~JTlG?nWMuPjw}q_r^@}> zSLpkPNs$FCB}3h0XHsVO8_2>0Si~kp7Z%WN5@gGKVFzYBF$6M&)Y)yXf0=y@?tKr0&puM(i~YcVWWv{!b}&qI%?dgqZOnDyxp9{wYmt7CZ|%B z@dAzKo83H0$R4MaJwsrhPV;wZV=t9chC&xnoCjAk!S$*$hEd)0 z72PfVo!473c#SGYzpF(7t#m5YLzM$ZDyP~!)(`g2#Xr8W7e9Jq5B~ej4fx^b_TbO& zZpQz5iwf+GO$M{vQ6T#-S6AZmi)(SDNE>~44P>vrwHD)AcNUkmy<0tjRp~REd8CA&4}qYLnfQ{0;=OQ#DDPs!!u|Q!!38l~M&);8+8dS7SMjwNw#iop^2092{${#d-~L z37$(-?;CmEEt@>WY^2Sz4$ir5dcQdQ3Pmi%u+612%?5ctomufj6lmiqs>Kp1~S!H=4vgK$zS!7 z1GXvxu=3?FDo5pgv>n{P&7tTJ#2$dm;^%~zA_p?tEAJ-+*|nJj*?&L{N1IyON!5A@ zTKa$+Mnq{h`K62BvgP&<+w$kd3jM_XX!MKHG@;;dd0WP+J;%B*CGHglCfiq(M_ zgI1F#kYa5(Vx>zP<4$Z!#H?&-XK@01%QM(lk;dL^%53J&RMfVy-xlHX2ItDQ(6Vli z#yE0DXajuMLra<~S5n6WHC$8;raETGTB?j?Uo>c0;78IN{Y%q0L~!nlcnPnNEz=*S zT9d6jOckgQ%udjDUZ_Y|UYXh|YX_fO-L!z6yqIasuVgug7;<+g}jxHsC9R_dfV ztXnk^Dy+C!Oew3ANvg4g8z&RIUxbEnW{{S0#bB0Xge>{o}E!{TzP@P>?Gf(a@>Az|2+J| zy*>D=SGVGS+}emge{B=~`m;Nz&IXfVUt5R&dS?y(^Y!KUqf5*1?xGr6%W+msaFt3^ zT|6}ZCYY%arNDiygTU^|*h0t+6^Xa1j4NcHiE3K~GVL>}6pJ?(wd4Bi2JEc}QC%f* zxucxFlO3$O;6OtFD~=Fi`w8rQ=>pqa_i(A-b`Dp&CiS2@o{ia*!m+9pj@MG5)e(+7 z9;hq9rP0qh9JO@XZ~@L;{mZz^oFFG^(=H;8R?^BgS*V+{x6mH8p8 z;_c-;uJ)#^UC+$1vY6UfBxsrZ)9FsyhAOD6UiP5jMGvhcgMg|fsH&dvq4H_3P4e4n zq(DYxCTNvw@}JOZpv}zEj!KbbX-CV4gpeIE)wY9k6xm$->}L;FEeFGa*slZG7q0ex z1Ty+_Z4lbXW8;XpflLbkwnY^^y`q-UI4oo>d$o$$IX2|<_@^q9#hja`xw4?G@Cas3 z1h9xFjy5=5>Z0W=)MlqXvzY?gYN{$hZCxZ{HJDqH1XPBAVyL~3=FQX}O4d?pY&Cy> zWxkshQ`XX%^k3(76KE=5a*D|J5C|$Bm$lrV4%qzIc5Q|4_t|lOEJQ_?!hvWADs9=r z$5nj1PxENBp$7@ZLs7ql)R{o0oU)TtKC(d9JBo0vjjA9^n3Uz=jA|jNI<9vTAYD`) z)2U2aQ@B$b$4y?Wn$P+iFVkyR+8fPj0QkA6!|2KRCC@YD{-W zM&fLh3zr)LrpgprP*C~S{~cs8v*X(FU3-h3ZB66Vxh=T6umgLtL8`I{PBqegx0l%p zrY8QiXXUXh2bEF}cBk^J)aXbVl`{WtW$X)NI;wHvQ8iCgnOb=Q2RZnuIp!uHi29asclgqn`s*WPY^1ERgwZm9kbA(kA!=RAID_49n&x+)NC-Oi=OhQa)ZY zG~s}ZDlYRx0m_~y$X*PiVq`u7L$vwG0^q0f@WBVVh97{8@qY(d;p6|FAfpT(8b-}4 zK?i08nL;Y9ZkUsitUMTHA2$xwF3Dlr)=H&I*599BbS@QR4yCy!|E0_vbr!&Y<(By^ zG=FAbBZP7wTch4j1ldM{Of7!YuS}tpOy!wv2>5JNy$`ZHFGo*5*1Cc=Z>Id8%~V{< z)>c8V3WQZCY~3=HXiM8Fi0vc{w|U&y6Vl{5#1 z^|j*;)dMZgS%U0FCok4^^}JGMzS{NB!qH~k=`O;nz2&r(G2CoS;LXNj+|I^vx2_1c z`5LcLDZD`&bX{Fa!)~0>931WINvgk-2|vydWM|aTl=k>k%1z~#k7KcEIGgt30x#Sv z6;a%*rFGPPjg?WHDWPKIMShZM<#-8I9*?;=Umn2Kniy_1rg614LW`_!w0v%s&n1v# z|Gu+p7XJS3Zv4eJ7M*~LZp!?TO<4nejzJQ}AfTu{$8)rsC{ zOW;(M+tMnOAEqLFwMM$#Q*3HgWnFqqajME|^{v`m_fmTaUYpm7cbCt?LH-Zh(uLSh zKpm^0Vk3MN+EM&4-~YZMH$hfl3R|5_6o*SfR$HqI4(m&&#sMWU>@QI!K4DcFhxUBf zPM95Ut;Ut!cFWRVJbnt{rHy*a4Pu+TbObKKYP<`prt&<>k7K<%g>|kp&#N?+&}l3f z&vTjQw?Ni2%8TC70rXFl)r=En>TvPV+?Z^o<&5z(9S5OY?%TX;@10T07-<1HUk%?dQtjQ6~v=z)C zZ6?2X+Dr##VGOvW&H`pJ6@u83!G!=N%C4j2Ur&oDd#QFm>RGnKdYAEJEaJ$SQe7r3 zK$IhBkfSH<>N+=1LN9;EM_a%Xay`|ZZ03%LI%R~cu1@V)l$N1-%RPkTPQPGAa1nfa zXiJZ#GuY3+y~9Jmd3j%u7lGezaUkSCO~)g&pJ%fP%Qrig4cSGeRW^a_Vr|Ga646|l z3eRtM731}uEUq>uEQ$5KjvBn%REc{vgj-PzZ#Goo`vZOW#_TR!p=G{6h@GM`I}veH zrTH9?4TjX2;#A6uW05?Zj2GH!r|jkBsu(WU#A!VfxWqV3%X+HZXD~ZjREVRgd>p4G zJ40)BfvV@aI;>Vu6_wH2mho@VwjRmm<6K(^-`L)b|9NdA{_3^O_>0#!Td}x6_FrzS zG?4wl=>fbwzXJQCV{xoxnso-bPK$WEBTYr7d9t8^Ov+1(AX22V)=IZHSLe6qoUW!F zRv8!v0X0m#HLJlucBZ8i+qLIpF_m-~KMN{Yb%s?A*-91H}r-8Q$%?=VXR+}c0@RvO6GazH(hF2&AB8ry?us?0KvqH7TtPKf{Sp<~;K)(?O4R&&c8JGmJ;JEt zNYcnJqGedrR9VLuewqAoXHVe>H7USQlB}OLlR%>~>o0Ir+1zO!%+GV*j|KUjK~?7D znmP88@;(-`ghr_{wZm2$Y&Bn0ZRW-R!RHBKMLrc+9)D+WK4Ufi#yU5j6I3E(kk6wX ziAM-Aj`m?MPg*tI3u7y-tzt`|AG`cf9E_*1ClDjVg4mSj!Zupf9aM`u3i@Gfc4;Ag_xM~>WC!EpaWFN}6q(f6ole?8!s>i| zz)@wqeYKUgdwRl-0-PXbu(Qq{L7V?l`|7KmRru_pZrq&JjQ!d0eUP1`f;``pp(;z; zZEY^2*qx^BR}C!{*lvCgy9u#<{vK$2})Gvu&NZrsFBSCc* zK^c9&@>_BstK|qHkg1|yEqn#C9)7XfI!<$CUE{sh4qM7hK$F$9IkN&PF#=7inF9oo z;-jQl+DkzyOl1{~5@v)}B0Lxb6OZbev59JIjhjj?&xaMX0-DcQQ;?gWb@I!UTejBY zvfQ%6B^gVWRZ;NnP@E78T5P5z-A*9x3C0O8f~|m-lyKYWFxwFsBt|7?Eai=P2itO{PjrgM#EAd~~ zuEsZJcH_%4T4_6-$4@5;a5m+_`67ah3PT{1%{8~`BXq&9Iq+F zsTQxn?0;ON8oRy*|K;j({3)&FA6{C7-#I!5?=Pyyk<2vgj}L;ZC28}3nsbxA6s!a^ zOM2Dn|$zgj-2;$wTrYt04DRM%rmFo9)L zJXknBpHXN^Z0@jWSUlE)gbPshK$Y#=o^o$Ck zlXkM5(fTs4iRavC;%8gP+4rIEHq{vF1q;r`h4JmVUHEqY47|~l#apdee0F-JCBAAh{%o-er!xgOmdwYQ z5<-dg^;9v{AHj8yYVD*_GZF#XPY(`f!sl)kshfXlL{~ zRF6t7Jyqn!$)wBX)UH%h#c7u*sy3Tf%Tl4072s685AUyP!k?aBf&YGWHU9MKGW_Ai z1^C{*{I1}OntO(>Q4sxmI+nAzu2&A(Yi^~mQOq6)mw zL`V@;_s&tCOH43$F?D1I`C^pjp&VG+zUPiBdI z9C`HRO{cZ&91}O3Tfc zIdz$Ymx{`HQszR704g$Hll7|2#k<#VTL#mTV?Io4e4voyg zAfM;PdfM7`(_FNd1eTBXmFjN&Wd1yr@SEnl4>MUzsWMs2eF55@upi3wKd$V5+B{je zOATt19kGj6wT;Rl6UeSlSMPt?tXf{|v{bJ)B=Blo3b$%fxLz5@tBo1lYc0hM<)o>r zMHPQH>%+-nT1SFKZG>bAkEgvjrt&EQ>I^T&voS3S&~_$yVe$f1dWfZpL0(O+?<}js9~_x) zT`&IQseb&YUDhMU^5jlZYQK`=YdINJ~yoEIaYE8P}n zXupq?6xbY@;(SvIcl+w`{)%3lYbl~4qtYbc4rB?}x;ReOCk$kJOI$d}`}PpfYP@Ot zHxOiknD(RG!vSl5Jj(YK!j2Fj#!&t3HmX?r-jhy4f&*n0w4Y^|H?9B+#(OYtw3p#C zaLpSjkU0?RAL${)Tm~^&N(W*dbPRP_7g()U_KePD@q5tlf|EO@q*oP&=T<45`7x&x zY}vDZ3V{F>nGc!AJroFDUROROc{};In?U2wPlQnPbew=oAT?wf@*bxmdw;Qk%-quh zkmVwm5bIdWoFaSoN-w59^6yamO1}B@5`O5V&vEp4HjI*|0{n2jD4|?d@}5>Mb0E{4 zfI4AzjZGNHwCj>UrcN36K{iQsm=4HP+F<}=%$r6Duicudf~3e~F9kErm93yPG?;N@ z&4EmIa}Dobtt47nK;`%dWXq?7uxbjQ%h&#OAk&Dvza(xz+s)V5sAhRoV~XvxkWyru z^Qhvcc(G}+12P9hQ?xpK%|kIat(y<(Wp=qSW)@ScfTwDm6+BIZ zD~Iel?WbxfZ}Y+w#BLBAcbiHLV)xq1@!IraTvlFMZP+H@)eG%(sT5hjAauT*%7>s) z;rM0#?d$0jP7(}SctM|u25_E`yTtc*GDKK~3viw)=5lqCwljhY zv}dX$I2_Kyv6vER`FFDkTqut_>MvD@lZ4r^a@x##58ho~hyQ$hA^zypLi}KVpMmT! z6_pg((V~3oo+~w`29&2Ny!JVmB4b#pMI9}24OLl{&*B_a-0^Y(O><;aW$JJti}}S> zvv8#|OM6JWOiO&YN*mD7!t*mb)sQ5>s7m=cXfj_do^l{l`*W-22>VQp?F=iT|3{Fi zW^zwS4HisrVcu9;N1m(m=|UEc4I0FB92gTYxXoqs6Icpa$?lvQ@NtQe(>r!sSx}ST>o@Cp5KmzLxfNE!EU|mk%4g z9-Hu2_fT2OJ+vMNwO@cQfQ>%I6@noDJqiP5{-7!v-QBBpxaji9F7qH@TGr`uxpjuNdmy%LtA#YSkk!A2&Ln&Ts zD#4xR61>`0!sjKZhCEba1PG63%W2apLIxh?n_bNkh}jgb#3FdDs2KOMS-e_SidQSj zaVeF+nFt|9>wS@M({rv;ot)$QI}s?rVgFQIE>GYpA$pqt6&P)fEm~m7xT+>lH;zjc zNh&{&GoMDAd7{E?Wkp|J*M{Feya3Rd58Y3;1l-BpULf}j$}%6SbbYKBD6@N$BY;_aBFW0X)FXxc^~ldaS-`j7{)M*@gG z>__N{ahUw@ptbzTLg!k205XL@R?K4wLtQX(tCmaf&ZU`{@aaz={Zc;C&jyitN+X3M zcQa4_>|Wzz{qjpabL zQuAPzSN2O0p!y=nG||6wipos zH%KcgYw5;T{_P#!7&Z}t8~OWNc-%@rn#H8D6U+p%U2ZA>f^QcgcrY5r0V+i$&+g?# zq|ITE(ej+BjyMUN6$BDhhba`QF{!RE&Thol=eFaW_IkY8T!m{D1X^7YuGJ>3(c*Qb z8dL@uev1=DYOd(95+oIiU!@|`%I2*^6n8Tje6xKzUM))Fo88?67w_kN7YX_ERI3;L zK3t84@p^d?UM3f};^Cz*NvWa!8#Wju+Y@ zfxvS->oS}9?vi?ZeQg(Bol%PY$;kx9SPK<)tBC$$ohH%=-g-iep~?JnRG|vpua@E} z20uaTthz}plqiMeNLKB7VmRH9!QK8gTx`n{T45ZkPFS3%O%bLgc3Wu|+mmYZ#P5Qk z6bo%ivpLM~G3c{y7Ha9_lpLwuQvjQ(ptn$^ZXxj0B1+wf4^}l`6~FWOP>TF%HnUO)l~kNK-M!ZgYGdID@n2}{-;$W z9z^*Q9+VPNy50Cv9Q8xugQ|=+ldi|y4q=vljEd|r4;2|f_NWihN4y9=F&Yye(yFCe zUC(#gZan~*LLkfVD41ofCz*llr%Unf;P2!gDiun^2ljS*yvETqf=7Mk#1 z;_*Ah<%2L=O-q*p*;+x)<;SvVUM!hRm<>WqA*kg*rsPx&X*VQisY-CF3yoQa1n;cR?+Q7=JPfj7G= z2Vq8#m1|CH8m{p7Z`UPpjjHTsHim0dBClnVc(*ExFE-TUb~1stt1EFMp1_?{nvWIX zP9lYC{G9HjlK6aG4ZhG)j|;R`msK%9^(Bj{IWdI_)emVS58qTA4A7!R39sTX&X&+7 z(q>vI79n-AQq2%UxHqc;ug@sQt@a|^>#Z;wd91Y1RMzFDr2Wqhz^KM@Aw|Vd&wRBO zKPhWVb*0RFl@@9L1eKC0KkQ0J6<+U~j&n`rINzMb>G~3jGgPmq>WXcmU#pZ#vDl%O z=nMmyHXorP)8dX6dGy^YVS2rvDx05$_Jr6KQ#qJU*TU(4Gh){+J)(r^aFu71;xj z{Yv~I$bSCw3WBVLAX`q5%^}Es1IZzUh(8%b;&F}=PjIw&DufJwmemxb z1~V0v3uXp1o}eoVeONNp!=M_QLR&B?M35;6D88OD{Z)hM6q0ikC&=~|CvmW}7>A0= ztT1>j72P`iz0CyaX4%mR9Ig2tH%{U2@cl`d$!6{(Eb69h_2FQ#*VKlJo0ZFTnIMt^x>6Chq}Q)?Ove|S8t{d-27GgNC*EqQq-_-J z(zw-}F^DNnQjw{&=w3?+)mR9(l*wNb#*IW6Uv93$`*qcLhd_IyvD~fTAw)$F09GA=D2C|bXIxh>;@@A~$>R`A4ducyaxGu1r zFN;}mycRM9Gc6Km)l-xCTBW_(l)^jnn(%s0CH51z2Wf}30%<{YseKUCW%o>Flwc;v zst7rym+-dIR@7enC?TrMeC@5EvLfwOsy#}twAbN!S0gU9)!;-;G0rq)t#S0+WK)k~?eWy%xd2`Ock1DZjNk1Z#Fw9B(VwrolSODBi1WFmn!(T`Pp zErCo;7oEOkv=w2(Cq-*QE2eC26$T4r>kIfCf@}k!x@x?Ks*Kijyw{GKc!F=HLfg*Q z+e;g=+ZV$QkLod_1~TQE-LC=&`K)_}w(NI`nAJ;*R*LH5d=(*5n>LW0PXut27u7x5 zTUo=ecC_HNs$$%!aTJ>>0Imprs);OhTS~@N%@akY;u_V>(@jM(#Q*}`t9xwIaH5GJIIevCdJ>Ff|YF7Gag%2mH2{2mgqa}W; zeN@u$af0_G;iSfuC(4rieL_=7zFDf{B%jC6YY)|xnqI1lul6fFP!uD`nsJu@qf#qQ z)|cCsfG29pajLNb`)J9x^Y@gouh1$E^Mva!=Ng+(4a@99SB=Xb@jPh$InY3 z+n24z;i^U|GEMk<2(vKej;14+5XHPPe)Ns@TFe>er=1MgDrNgnj}?bYiK$hOCi&HK zOlqu^029R2bF5)V*g9Qg>1IkFDMaxj1qQR~XQK_Ju0Wln{aJ{?3cf42ED zDzc(yqI5oSq+gtB=@*tq_5frb53N{gevCl-Fl%`!AN;hIAX|<1uFS`{-}()tUhpFE zWW-iZ6sadTN<7IUzl7v7{1S%vQ2M;bCj6z!RBx%`arG_}#MD)`c??w@Jq zl$d4wt9)rTA))A_`sttMC^K8ZBv|^Vx-pMRE7!wJHJDOnxmG{gxI`dZ?GD>y?EpvA z#rzv)4aWH}FxGAJWXkYY`I4G1YHvc>i>=Wpw#VZ*n90(9%32a+gy=@bTE3T+<2+c$ z<=X_#Ca*>%6$H(puf7LV2|)fiF>|y*>7-Xx9nREA<&GhCfZELy;WR&g{=bJa`fTC^Btc1~Wa$&M zzq<$}<%1n1d~eN|j*~Uzmf(82p%NF{8gaF|1&3=(v5hd_L;$K!-97?Rd!pK|;4T+d z{gM>~d`7*eKdZhR`}Jc)zZ)`Qrqxm>D@?0rjD|v%EmdWOq==67#||QsLTdIX6kI3vy!P) zjJeaim_N;D%1o=61~b|@!A$+j)&!$iR!C)5$j7M0wCc2o7S@)~M-zgh)b-N=nd&Y# z(f-L=Z00B|h^b|94rD7Pda;_%UB~yZno4fP7%$dLpylLittG@Z@O3v*Np9x*+g=#M zb{AiVO3%_YLJ6w|P`#!DGAgsMkLpFe&Rp1+aN|gZs)P#Yc-n8N4Y%t`aksh*pDixK z7s_k!owg3Voz3DdFYvE)Hsf<`)n+l(O!2x(j0WwcY9iI);xa?4o+=u*Ha=86H>q}R zQ^`oBySosy)*_y(Me*YKC2ttDOU?h+4v4Aj9=T#R$;x=eqs8*e3%8uGK zN=5N1ZxYCKR4=eYMQT0mw)=EELAZW-%`AL*?HsC`ur)?JS(hS+3a}?qfc;Sq4p5~E z@_Ut(91UYvD1aRSA9hnA>*rkTqgvV(4Ot4sjxa%^4Ppr7i!BW}P?jN#JUCKWiWBvf zI8;-D?Nnj{nL47Vi?H@YUGMi}Efw6T2(Lj*E0tQM>=+S1$EdLFj$|OyKu(7uh_$>N zNBs+7R6P?w&2u4BU(<(|@I0?a<11+cnvMclh9FZmfWT!|Qd2mDnbI$cpN^V%NIn%s z^7*Nl`Z%qn6xjoi{c_M!{!Ad#W}nTb$bSAWOYzR7K8*Y1zeo7lX^3f#>?ztwd3D0f zf}=<2OHmZR5JcIF0aR#9E7g>#9Ak*rdMwpYYS#|+p<$#SP3r4UWu{e3gBeehPRe$5 z$8c&f1GbW>{4yysC;SF9W&7tc{WWKntHoUDi(pB<4@(Iufo$PKpD8k}ItgU+M;Br# zRn*Enztvn?Uw>_`s+^)&0y`5K>`!K~atdEhD^~pd)%<s>BYy z?v6knb_bo7NIQLA?C|+{Ux1&R6T4{ll(@Q^U~wX7k8kq2u*FBE>{bVp01lOv&|=ox zw7~MhJRGbjHbu6(JZTV9M-)L!X%*^-qW=0T^1WCx#f@bgtQJ#o>3mrqj+>gdI$kv; zNEcyGwjOh*_|P}jv5?9Y6U6!msyU-M;Est9WKv^6%+PB5%e0omdV`OTU=`0$SEb?Y%t{_gz~3D$PivdgY(ZyfK5`VrJnL3&fgWp z5|2epNW`C?f+>#)WQz&1MYNU=Ci{OOe)fUp$W(w@PmuA$`M1UR{FT`l`&*wt`jshZ zHiYhRL5AO=he}9`0D_s+SswwDThYv=WN6MT*Cj)FW{arUme7hWnnY_!<>ah5DVfo+ zmW#&IUJ^KJ>tmafFa)zL5j9>+S*L?#6Ft8IvXx^4RAd~n39=l_)=$#pf7oEAMSyja zc~S81Z*e;oQ$^?7sTQqkhTmr}lQOd{=OW563t&HQ9}IbMj<)J1FU;GSQrsp`uY_Z` zQ(A<3H5K?0Ez_&D#kkj8Mp&f{VCq((w2bovNe*i2Oe<@5k`_}L`Kre}Phei+g)E4@ zPD^%`HtTXaj5Aa$w`*w`XQIblk z4Ew8!u!~C6U>2itri#;dyjH8x8UQEp`{lW$sfYQKTv+3eVM8=&l_JVbT$e}@hIO`L z-ap=N6Z*4xzV>hs)=|l?TBQ`oWGA&(rKMZE?6q<{0ZbrM2UzvtuYPtg)q*h6B)&n5 z5KBCikK!l1Hvg4;xWLjYN_Z{V$|OV6H4+QDz63LYOo_0OM?-W)VML#ugvpP70>AS< zt>sS_J^!{3R?kJDd%?V^H z2pjcUSCN5}0ex9baJ(Eb_6fdSr zsT3|37cr8!L@TK5deuh0)>>x$#m=kE4wabp22eKsS^lgzNmX`{j~}9nQofg|uHrZ@ z6QFOF72_+-4Y)z|^4YoyYZY{j%H?VqpH~{gg<`&rN~@wl9HEUn9P#52p?fIo!Qr^a z0B2UXL}?=g8r4-UT|x^NT8$ORG=YDZ&^uM1!R4-MoNh12UaGh4d|V(qToSQ`51Ths z>WkaU&&;W!P`b+oem9%)Y1yf&RUWpD%6TW1w!pTXz}rmlZ3|Ha2RK-Sc^^NwV^vkS z(AH`o+fP-tkLq?0|2J#xlpxGhgUjDle>zPo2xQB79xa;eHIS`RzcGSrLn3XP;H-_M zv8S>TD|{Kuoj@nR?^}6dy*zJc^1PivSoNrz1<&2i;R0EBu-DkfK^8GvS^2aZ*(cow zvEs*EJgR%LHrO z%w$Y@L?ByYN$Vf{TrTPX$eghGG2N~*m?;HAP21kR+G#R2`od_0pPGX3n@cg1TICBvSpQHdc_;WC&(z%2@M?(li{HDPdNb|JvABTgY`1 z6f+1Bb<3DFHA;~2BvST2kGVwvDKksaFsm8HQV$_i5TYUrn;M%t#;KE2U0nZ2H=*Xm z!f`Hwj1VI9HV`=Lyg?hOrOY-4VpMBXaeU570!n2~1~I~L$#Aa&Gpa`?sL%#smb01b z`2IHX{cPs@*uwWCo4GlUK|7<)8EXHt)y<=amdYP6HKH2LgS>c7gcCSS)u5_?)5R&O zBmNxoQCTH$wv1Meajrb#^cACZR9~@^WweE~l2T%tt5OAlc1J%~k;L7$8Ux|$RC#v^ zMWtQ5Q&EAd1m#zzx8hE=1m_b$oTDl{6D9Zvv2)1?js|HJX|<2giXEV0I!NWD8coH1 zrC~6R$ZBR|zmWTNxQKAl4(>6kxg?cmh6*Z13(5C&Z&?q1_wYs>q}A2Rqg1KVQd9*Y z#kzq2Tc78#bQcW<8~Oci%A@5c(3Hccc}EQnT145#&uCqN%XT)>it}nJG{NjdT`kTM z)B@R_Y|1A3Z4ZZ-GY4voHVgcw#+OX=T36R)RQii)AD8pHTC3^}+WJ*g=Bpz~>?o_n za(@QB9QM<5Ecqt-OXHsC{hujD~;z96X9tpMhQxQaIFLgUYutgsWBlJ*^KL-(hdJ-l+ z{0V&jJzC2LAp4~l1esPX6?WfG=iqCv&qQVZ3uxs@RW~t)a?0$?5EoS$-ulTIhk2+*Hng33o|4!Ps?nx2!OpVxfa=ErY zYWX9W&CLtgil*h64Z>`R6xATe=8g4Hg%N0@97VQ}Heu0tp2P&%TEa%FSF1QmYb8t7 z08(k1Lt8l7g=HLx6-!6?Efx>+7|d4kq+UUwtr+Da%zUV*%n@;O3zSRAkCdAbP=l>U=QuoVP6z`d9iJ$LQ|o$Z6utcDoO`&Afft7+QF=& zz637iaH(Kib5#mWz@MT;Je;P*q$0Upm!++Y;&v*HH%rR!&E_^-r$u``U4nOOYH>Lp z!}(YUx66xhy*Po_vPJxvuN9#x45x8C7{g(I5QltJWmHZFg0#bd0_^rr#lC2P?Yyq{ zB%leNN2nOJBCC8kf$Si`yFJa%D>4;d*hK5|wYTv8s=55%LblDGYElKV9UMe96Y`s= zTsQDL+(5W&&W{rOF@xF0JiiSHQfFH|w4kzx`GvO2(Tco$1DQazme&1DQ$3E=SK1y9 zf|&L>-4f9pXvjdehOe=V;95L^-zC4R#gmk#!|#@VV>wm*)>J80N8?x)q-{-SvBZ#D-Wk$O>!21UXy}9EC6&XRM?wx{}Rxp(yyNa+|OGRc| zcoq7vjJ8JA08(j-38eWW3JEg-&4)$9dD4&M$v@0%Fk3+zyle!2hmnKXDq7gpsNG7XxZOiVL91j+jp{%uZOb%TO@eN}J7V>k>b|jwc1~qA zds9>`v`1Ry+@JKAWfZWqdYH45R~nrO_!DJ*o4-1pjpHa`aV+Y?rJ{sWZ<#5=7aAII zGm*rdG$B`1gsaH}-l%o@pWQ6Y;PcJ3xK~q!8zos>E-J^_WEv;6i#FfSK|*4Gz-yg7 zv`@jVKt6Vd3kP>!=ie@k;25E%Jh>e{J{F=%iny^QMm1Moj0?T>SQVXyJM-G9n#ys2 z|C4rfw|x<4x200eT26M`K(Kx))hrd$`e}sLBz~@hk3P$dRA`$BeTAAIs$O3rg@Dx$>q^U+=$R-h9B|M>4Y7a5nuwD|6xDepDaM&VXr~V`zbHHpYg%>#KZ?6 z`#;6c89)8GR2e^z4{0wypep-GKmPFjMOa$v!;a1_>}v1F-syeV+d2zdD?6|vT4CF~ z2{ctN7ZPf2DzZWpF^Zq(ZAQ@x9+dI~$nY`iFiV(eB~u%c>dT-0N|YyrN}8NX0L_~T zY66+kGgJXEgAnTCiLU--GbZr_qYdffiK#wjYMGr&pzWU&bXJ=PnLb+8**qE5sbImx z5a#neYB4~25NZ@&D!W0oq?C=-g;C5Io^So9R#0^=9Tz6ZycihjCdB+$Hk{8RY?lus z#CUtv$N&`@?;9NGO4pI zyr|WoVSg%)eYAReqs~g_UfRrkaqSAER@GWHj9Egh=EVfEOZ7>M^VKP5Cv@#pPOzLW zj^aWQpHJ(k_B|Ifahy$1-Nm)4S%h0v1WhJ_Yb6QXt}4TsWE5AkWw>6M#hIcM4u?ZH z6p5I6QYy(V!b0Iw1KILK* z;GNZdIM-2uOYPOz$KTuN$;VE@a$~-W7Sls`X>O9i&v6x1lXCdh=riO|KW{9IW3xM9 zt*6&g`L3GE?}EQ4+o(-ub|f=YX3aR!SdZ56>aB~HA6v6h)Q($Izd6%E*4T!ppCYAo`XQ$@wlNYzsLq6;O@7odayD|?Y& zvsyWu|6~)2Vu#ZW%tanKNk%1TsN% zetwJ=Gmb^BB<2z#Hc2}^U?7`0!ow3#`9K_fc~LBL#jwhkz;cezO4V3FwX~A2v79G) z-_QcHOyele+k%;(ww1t@O4~feb022gs7f|bVQ5l&PuST%K&c0N2n}bS%@B`194#S~ zXz7&dAedRp>TJ-Uru#G@uX!wmCg`=|s78;cO9(K+Lx4L@`*)UVN}yAhS#4~h!tmpX zAORL*B%nPA)b&>FiBxW-R1!<_4H0ToIodYQHZdj$m6d;jFg#OMOtm?Uu*tXXt4At} z@%n;Zys>;1_SD93sjmT_T{9c+u9<@~E#+1Vxs_^9|FjT3eL+D5z2%2xWEB-h9ND51hCrZvnylgrfSp#EgglF2oxZ&s3uEBbH{5!%Ka z%!2&c_h|y`(;oOgLyP%o0_;=4`yd zVgK=5eD`KInkGJtKB|T}Q^KZt7V?5!RhY(>a2XDk)#G$SD~?sy;ZRi__LS9PU9=Sa zQ)3*dD5;;$N6AwJ+LP)e8$kAjuBSnCUJ zCpb8_sS7gi&+U$+e*C!>J<1m=p%N=1s4@gq*;734pN(25PfY1ck;i;C{}r_MJV6UV zOskUunE_0S?3Y01d29kkeex6d&bx~rfb5q;eaNK9)L2p05+76=$bN8ZCc35!;R%t% zmS83JL~D7{R?}uwVSAt)J0fM+moCTgY&p(WSL1S18!olZz_FSRY>C%m{?uaIe4*sA zsn#7+EwR&&Yo(^Z=FhYTfEEMlUsh&x0<9wxrpjb9+sCRIqtnN%eT>KY{VQQsAX5c^ z^2_G(gqFRWN9Chko|XHf&IAIPRGG4|=Mir6d2wh#Krma#i$;^Z%c+nwccujarwb?{ zJqWV-gw_BpgCM3@%+WU&zXG$79#dpeVyhc@v4(0=mQ&p{HW132r_d7d z{i|W4Eet4S!xgZ(BL`|h%X;5M1*DRl1M2!Z2(wca0+}=6exfpFB|zE=O&f6>W2l3~ z{)`s~(_RCcY8+3N@i8hiDYw(IsjBm=O5y~eX10_n?O2AEF%_d#j1p#H?Dq3LP?0HB zLhngQtXthKZ1EKE`*)d@)Fl3~OxhMK)c-2 z7jLg!fN$?wj|15v+Irf{NCN8$orRK|B3n7hZxFMXKqbu30?bN+NE?8xo*KbQeuhe5 zR;bVZ>cR+Cx%gaK#O+1JI6<4ar=rp-KbG=-TL|KJA&}+Hjoy(i%pTA0(VN16m$p;N zFja;5RQH`cA7mkWM#KzaZ7)!L4I#)FEidp$kO^X{sg$dz9pY?21X zJV-v|Mky6o_PH3!pO2%6>P#sWW+!DMA9diR(CTF5u?VeYgfI&m&>W~qp@klR?EhB? zWFLH}4M_BX5M~0|zs$iOzS@sv{&Bn@YH&Q>hO^1(xLDMQ^NeE&o-ENy>ps<~o2nLlj<=X$u&x@jea@a{?= zgbyoeUj?rmwAS+PDWO)!k1I6UPpxt~T{ZkxfWCf$3+pDiv0;iE8)-MSAfN|^KpN%hl7k00$Oh4S}8XHO{(o! zF`t_j=&0;yJ&(~|9xqPfNIH(aRAf?yN?a9OofHx&N8NT|vnvlf{BGNwT_r_oPPy6d z!)kXS2BuBI?;qcf|9a^--dHsc?{8m;FYj21R~OI1+p8C1U$%tGezL6`Z}P{eviSM% zdlbZ$Pw+ZwjH*lkTQV+)<2(lRFd!jZ)GOr+o4t}Rvne5WGh8$?y2rESk zl~*pB=qehYry66}&fy;endZgPk9Y|&FA|@j8+kf{3PLQa7V*zUtdopDCWuLqDYYW< z2qDG@KN>cW1$a9LvcN+j!Ym9QpZCkw@~02x$UX{zOq2chL8dvff0~0oeswO^ho|9a zvIZyo%{cC=#t~N)4tuI`FkH_Iss$&jr*qWj|SjZ*B26k~5H%L}RjXBs+jwz&sK zYrC*MR*jyqsymyC^rI7zdUOhk9v`%wRBGBnUb`?^X@};~MyMT-AB|K!ts}gcPMg?8 zUyylM#VF3Z!Pk_yN(To0GJ%RcA%6Eg#fa};0K0)TwMkfivFpWL2m^Cq6WL9Kf_&mX!6fJgPcR3@f~Zo1cR~whAX2rxRv%Sm}-t zW)Yh&oyG6Gm!N9r_ol9{s`FjwO=6y#po~^veqoXA5Uws3?Hp8FUlhbRpz_%ALJ-Xi zK}@TZf|w@wbDQoebH9XYEc2)jsfT?I$Qb3%#8FCHS@K+zAd6W82CYc?gZ6`sd-Js|4IVwHTQGKOsu4I@8v#1p3 zjUezCbB2caGZh`J#2lW;^ZEA`QfCWZ_F2q(kyey3pTDP=`(i#8k93=YSWYl4qg_!f zQF;ay-`dGhf{ynQb}D(2dRsw-snt%EJSm04DSMLbbgZXVIhEzEP}+vtZ*LVyRGY}q zUYz@qG3-w{8x5;_YOWphfvnm;^YIct_7)Rj3M#UFRAal7ZXBR8J6OWU`LlN8R{t;M zuBnVjtC0fafrM60otj6dR48PT%ZJk>{icFKQ*4J4N$ig$39^KBVqNR?VtJtp%e`*& zPo0Dt^Jd{cojQX5dhsOw`_=P!ZQ*<@m^O_AOFmUp9IFb#1~Scit)NO>N~mie$($M! z$ka1G*K%5`%L?_HTh0MYdo!qQlRCQ!W-EP!RskQ^doHTP{;DQyPgi1y5|Q+^bwHj)sFf5u0M`H|%9(x;+GJ?^Yjs;5}$>6j@pgBW4u`=l2^+D6Al z`b~K`FbkNSl&!Q7$R3;g3m|)-$UYW7gVdP%lGX6Y59Q~ymjAW@e|W2p3T8NV6c%Im zq$=#0MAem7i9Oyr?2I;HYjG1cmA7GgRWCM|bYXS85lj4KSmG_hia-fg1v5N>QrMQN z!oKn*oM`C5v4&aLoNBafvS~fn`FeBo98K(x zNm7x;&_@L}^F^vOf~@~#0_+t6aL{Jvpf>*{uZ2{aV%|^}21XE4vOJp4(Yy;GwTQ4% zg}@rVw^h7fv2Ie-YB!a>p(+8@ZwhGYt|6G+FMXnNR36$ET480mtNr$77p4^!@fj<%8C%9D%)R9n^+OW(WvU<&1m31UtyB`xK1 zA(TC>EfF0{nNnsxA(jJKg7z`>IPKzRTozifOjDt0K1|?}l@!PXH2v)3?|d9&W+y)t zgy*+H@M@my0m%OEA(-Vr_H!w+f9c16dTkyS`zB($uMFF!RbwX=+5SK?_9i;9H9Z|` zOPjH_x)WO%J7$X2_M-SG_z}|`u z+K)0TzSZhx*;9qK3v=m{1sv6;8O+q6v4%FUbySQ%QxyO~Ha>!0p1@LOJv`ZG5=>HK zGkJ2WJAuV0UO=O1CB{TCm#Rz)0J5E0(VRaqYF!O_U-n|g5GpbPYyOBhX1?G@*E25k z4xt+3-<3KO*bHV2vz#2I1+{s!n1Y&)b9ph$ALix-=QRr?+p~m!Zz(UhReY~&CdROC zassRQd8{O8SMdMUQ8k=8ssu_&wmF4nK`XqG7uV)|+O>k1l|U&m)Ux0U{n#j&cmmi; z3nk!a*Py*cw2TCktmc7YsxroY-nTbNm{D=RF=LnYxV_9O{1 zzLs|2R)O~RVA%eS{^mBn_WtDGC&V@u_-yMu70Dlp7h#v?@(9*lkpwnT2`!&iX!Bp| zXiL|Hw8-MY;zC+*T2k92hEQJPCcr##vxX~_24Ug15S$iKJv;kKYEMb3rC$mGZLvVc zfkJbgO0TfWj!FET$r{`|*2!WCA-OJ8iUSpG*ujB!VO|Qo{9Vn1HSxP^A;@OtMbORP zQLS&^v?9w5tD`e$mZf|thQ{aV4xW<|Bgl07#R%$NjG_AZFe;x7+YU%2Qe)OZnFP@wftBJVjp~1N|4c3Dg{Hu;~xy*k3Y8r%M&h~tm(nw%uF0gcH>CNEF7rn z$JWYOSeBiRf$|nCC~iexq7nVk1}sXqVRcD2R;4?zG~9rN-YP6~S74E=3n~po9nmY?yI3Q!hBaE1- ztZgc=C&)I_R;r{(^^tXf3CznPJ3oyi`pgfT=^P z_8zs};HS}MPm?_)$O$oL6_U59OczsS3u0PLo=f1&=jW!F$L~!GGdkLRf*L<>)z&WH z0HQ?Kd4!-WWbYU^dPcjb{HczqwAMu`IQTYTW1=1_gH@P4C23O@&6@b95?11MHwTf~ zQ!`d_B<0oeBGuRn5i}51bkguX$H;e9v)&qF*Ch6>G*`92jfMdo>Q(u2wV|8tZNDl)1u#?O96 zMfTJA_`SCVFfTF{o6>b0)ta!{Uyt>%R%|Hk!K#X0%qwff%uGFcV>M`}>S`ybdVQ6c z7p}!Xv>q!`dTuv1lyqWMvIUERHJDRaiatJXt|yBn;X15Hv|u%%*YB!E6K!PnIjXX! z3pu*w@x;it{W8@K$Tl{i3R1$Xx@NSiS32R)JuYmE2ufh=rd8B-_1zp%)vZ9SSFD2p zF9z9(KB+nWUZ*BIOQsz~B{9N_g(H207oo-XwuBd-Zd(wpOGnZg@nY2Nl~j$(318K7 z<`kP^6)m)YrUe2m94NKJRz)ZAHdV{oJSnBH6|1YDdb8JS{k$~ket`DvU^2;w^EQDM zbLPDEM4a5Ty@{|@5bTOl)dgJGNjtfnp=4HV*s(p#+mWzspSE=nWL6?n5HN@;R!^mM zp6ufL@R(}bLR%@-W+0pFvCv)#YiNztePUHUK{j}M>0~#SPx9Kz<7&c8wU8>@U%{WX zji1z*S}^G|?H^8<@q1MCQ~ktJ#DdbPsD2O$M!oVJ=I$?jp>(sMdQXCI?H70%#)08iqtsOHer=qeD=G z#AmcKc#wlFLw&{wF_j-_9!xe;Ad65*g+A>kyqsFe+{C_CDq~L&WKYswJ{~8`V)sFo zo8%Y7+@EpMEfhg1v`_NBPX^$6*h#;5kP!PTq1sC2kU9HWe(+%hKKOw5{kR|Beswll z3x;EkCyAL;OVBg92(t^bm>(mQ2&j1#?U+ND^+xN^6R1Kr;ne9aK}SIbU5r^Cs<3bs zE$DQt&a_}ztPul&YRslO>&+|0tb%gP^;Yw~IxLMgqmQrMFibf&ZYPnJA&_OM%mgzj zGv%47Ylh~{+8JGhnt_ZE=q4bn%?e@GBULs+b0T4$)C3TZ+PX`RwLR}a+jBm2(;m!v zIf>pEJ_4DJcAM5>h7=otrRXI{dtabpV+ddl#GLzPQfu_7G zsWd4gXFqwJ`1zHHw|LQCMUR5T(!g{|=;Nw#x zmf)(Q{T#?Nc`rq#jd648YwpOfg#)sXfvk_;^K5>Xvxj<3nJuEtTsAd@fyq2qd0wcT zNb_Lo9X6YTT|XaRke9^rKsh#~8?i0hiIsE_JyQ~xKAz8|60~ZPu~AC_(u!o`3o!#( z4WXspVuDyDk5XZ_JGfFUl&x5u3dCe~R#8*d#t7rUci(!+x6=i#{$z z7UOL~YOwssY$PKGvfR(Il>(XPQ$e^N`K9!W2O!IZCiw-iTn7x=N;O#gU?IMKdp0U3 zK94S*ob4RF8Yjk4KOu&uDaB~>RHB`b>Wb8$!&`|SUp0FDRhSv9!2ColR+KbjO+_o# zls92nrUuJXwOE#{!;*L%<_l(o*34-Yn3b1B_tZ2NQpGKb)MI9T8Cu6CP(eVXX*Dxc zW+hL%t-qOCXy5X- zgL2Up5L63z@d;*vl|m&?iD)y z*~+ID4+Jy^YEGJmjs_tzHM%N)qm-%VC=Z9Wxa zUc?e!wI9N|Ji?n0%e76?VDC zKKnU{EFi3w@f@8`Mb%B)uS8bmfvLz_n}lfkVg9rP1`5+ybWb5r3Nx7J zuQZs=^VOhbOdKW86d?83R1`f~XfVq@>)1@~W-goA$`jT0&LkkFQ_*NUE`?5B)yN5E zT?B`e+6)3lEm)d|c+l{)3(e2+WPd)6t|2_}pN|n>4#+xrvbI0tHJHti%_PVKu^F_K zGlqEYgUo>#0Y{6f3rdP%0pCjwWQv7+PXgEiDmK+_egrgG%P=3O<>7mh)m+Zs6Tp;Y z>wt{Ph1OYJI0lBg22~mFA4|o?aMT$AK&XAZfjVvg!P*K@J!xJ|4Gd)iH@cO^ zA!tRN3Hn&vETkajfGlhPlch8;5oGIKRDJ}Pc57FxQo(kf7aKhUovbGzrhOx=`>rQy zb6$(a7TOA=tmFFpsFfcHVhUTCRI^K}AU!UCt>k-Eg6qm@0$Ui1l{Q1AWmfWI;8Nsn z&*A{n`;v#>Q6c&XeSvJjM7n{Osjgn)pfnugo-JQ&~H9R&`-dO&4}o zOvk2FHI{{BF%wjL96c%h=LV}V5NX65UoF}vm!N*6$~xQ@ss<>3)@_RbwJ-VZ=b1HI z-*g|^X*bj-szb-YP$N9SOi7N~bFlF_7ZsWJKFB(sPoVQz{%xL^9XxS6cz*|hDUfv$ znB7!?3cF2(rqDc^g={ECZdp%VZ1YA$EgvlhGP9TrflLs~DKx=LWl&B^hpGo0z~w@g zbh%bE8G@PG3h8L8oTGiTr?i%|oC^J{)D8!7O2{SP2nc1#E7Vm&^J#*QLM1_hlXjDm z9aOVI>%1x}$>T<^kAMo;V^Ul8TmnnKyOQv78WpPJuE%Bm=c9X!7jyEW=$#hEj44!i zRAY<6S%R#b?jUW7Y{vLv1DWikwrtBOGJ#C-@l{IOb)O)MKjK4(pwhfpfH3lZYB2Xp zE0UH*K_GqFYmu81)8nq+^xX%U1F;|q_`3!CJ;BT+kbR0)^OL`rej!CBkUg-L_oEy? z|IpdfQk#zmVn6>0@29o=#=W_yEPMrXiYf@I7WAjvu%M_5v!m0|;i^GYP#htjEfm1T$x26SWZbqlwneff?;4 z;h+%I)Gtb4(``Yl?%4tcK}Ptr(jEw89YY9Fo}>mbM*GtO8R7RlAxPEL#fw7G$@if9 zx(4UYJ`OU+UQ(3}<7iKnIG=x4Az&@w-|pwdren@dIv~?yv``}=gqP;bLUwc%o1W_| z2&koyz@|k5*-y=(OU#u871WlF^IABW@_hazLTGTFO6p25S~bnZ z+a3pK3Ia_1zSa{?+OSw4lPcTni~d@W>E}h0^0At~v%J7YQgHY@9YP%D+@4A`akCeJL3TYYUM$e=OW=)OTmV|w-3~eP9n!AKQr>xGm zb4=P%WP>Y{f|-t*PM%LA;2x3i64*8HN^c7CpF>0%uf>>@2O#u6NXufPdAvW)o80Nl0Wybe2e^`V^s9MCkcrV^>eW8741 zZnJoruhKl$swsnTqhiy>#L88()Q&u*cR2ZK3NdM=DEMR?`BZfUPmaaNhdzOCe|`Z4$D#*{?Bns_&!xyJdDMr}z#z;% zn2+zhv(P{`P);V0p`2%&VV)9xAb(@@CAdY{kOL=~!CYip9mvm|t9rzH}vKgv)7DOVJ&u!R#0n zUAP%t9zric7<%i_Fg}ekp3K@qQ!uj*8iYtAPh2ZF*It4IN;84cz!Tl++UZ3dEoseD zE(TQ@ZDl<{Rriz+^-l)S@D%MSN7z=5wrzx&j?-x=ItaSXArU)v32F-7ujqc(PbJ2S ziATjuDu8}knK>`g0`UTvqx>?4RyO+yScQJpQJ~A^qzPmOJl?NZzzbCMoet2X(83lf zjmj0TFCmyeDqz=~T5u3(&T6MAv=J(7ry|q5k@D9F1T7i}Z0n|I;yq$3p1J;CAD>%O zZ!m=eGbP|U3Qlukxp^{ei5tWQ__NB$H1E|%rK#H4nXmX9^~FJ{>qRQ87rY#Vd<-h+ z7x*2$6h+U71p3C(TB^t0a~>-((s!@#yoNy2N~AR>;Ah;-&$D$Dl{T%Unt9HeR*de6 zY1+nof-GeqQ`wQWY7@Z9o{FO6$(R8w^H`L}m>rXkMr;>;b+T|K@Eu5f9Apl-2&Lb0 z+ilC#=i|YL5(Y8XZ$=Dc1~aLy&v+Rgi^9+Nd0z_opJvda7Cb%XBanTNOTSS3`fL0D z&G`QuWX>EJLH40!sxpQ7!Te-CzV+sOH2Fu?_6`7J9OR_r z`gvQ)wF&`kK4B;ImV=o9=RnSHkyC5AIW@K9wyqqqos7i(fbsjH>LBFbbZUfRUg11b+LyMGrvstD*U^ z!L$p;&wpNp5C3f*zWVwcluQ|d_F%$REZbe>nC{Lpsx1AY!Ij2zAEmsn6g~bdX80@7 z?x{c{pI2X4hDJWO#aD&ycmsM9w2PTWEFj1Rit4erq#o;QJF%yG0Nc72V@>OPEUBH1 zIi+3bptWrF6KLT&%*?c6ZdoT*HqFD@mPJ%=U1*tBhVo$?9eDy55lm&Od874H#3LIk|Y1%+*v!p z)lMa+FsSi&6jEoiUkV${a`5^%$fVMgbCv^HPNhkm31o9$;_X3*eLNQMegRA{6V#;E zJ`OS`2o;6ErNsoni^m+~6q;`{xKZIO9O<>%&?N-Oa>7J)p_bY)PA!M1)F#rN+F}8r zm+M9`SUTkN0iy~e>@>HfQX-{F$TkXK0-BBjmo=;$Q9w|6Y{O)g5jmT|IJX5cW#wz5 z81)JJbug2)R84Fz|A!v_udQUc@-r34G?k#iOAxbo z#;K81V*<5X*MgCD^HK?1I|oQrj}$#I4Glx%92{vSa})ZHdXauKzzA9SkxGwLf)plj z09X+77p4q#2&V%pFF^krwDF<6b#{0vI+l4#`b^%l2aSwlZoH!sAZ zvYF`gHlku=+V<2evD}`J<@Zz&R4N}4*eVH|l1KAV{uou+6FhOB3RsvL8?=?VaFkiV zz}E6~*nrl|=bG*0?H0nTjnGm|=LxRJK}`v?st!=}5Tde*j`O_{`Jnum@ zU$c26&*|an;OesWQdJyyv=dn7aSxJ@xR7|*ZL5;8hy93r+K&){qzHV{3-50^^Ilq& zRNj}RQ3zz8Qr?$SA89p`O1036rb>_qw}Ri$YNP|Qyx;UA|F?VwFaa&6&hmAeiY$-M zxA;s1`HxM-2-RA?w~W{5(gz^>#i%62K5BXWlMgEJ;Rg%wmAkVM9{DKh3KFQAkg*)H zhWsSjyv1k>2vkujuQ*!si_n@^hL!??i$H6l3Tq_53}XIj`@QzUB1^?smTADM(gv(9 z=dr97%gXApu(S`WJ$3#tuf+E25T@G7Hn(yEe{$2C!_U2IAoEhNPJRAfHX@aJldur-hSP|N#dEfoS; z&SvU%^HU)LOmk<>{8NF1MduHv zIwHUp&~nZnO3;iXtj5F`gw)umZNj43(M3xCVCcCj;8rMEb?HPtXJXv)y<{6T7p7wl zW{TOv3d~N<9#&}cU{)6?n>!(f*+U60g4L`e6{2kxLzT90aukcFCb598FOWIAeFrdu z|3~Lb{0;~)!K;k}mZFiLe*@K)K-Q$R8A88@)=+)Ja%xQZU?1gz@f@MbR+p8sX9P1Z znnuJ?$ALtZB&o;pP{Hpk`&`&oCgYEI5PisF5R(cE5nh5=P#OD-T;~dv78$GzWJ;BY zAn-i#m%J`yv)75=6aTb$1gW7=={2s7_}kmdho*dp(@c$+^@`?QxJ3-HMM z9(6$W{r8sxKNH9#LLPw3LMluE`;Zp%XFUGvPs<&U-J6NP@Xw%hybmR#lc<|oWJ;_v zL=_e-Mx!rARhB^gB%TQ4<2)wOL?zbhF1MVsMk*?)Hud50y&t|{g1vN~+4 zZp7xgHY_ftLMv&s0`x^yomkyA7wcv$!7>7EPHivROIpyFs6|7x8XcKt%&F)>U)c-woQ~RhqG1|v*G0XMRguS*} z(|nh8qF^i~kY)`nFo-E(RnMQVdRHo}f$=f)yzH_Gd`;x5W2^dvsi=Q|YHZQeG!{%s zU=D%$(Qe-nTbXPf!q0y&y+SE8O@x$zjGtc}t)wRSXN*jtjjFevVAGUB70-nVexDT_ zn9BKmS}SS}NTvKeC0W-Gi=&dCd*+D(2I0oN9(*u!2+cD26xniCVy9@3_{ zVFW+p%zs%1K4GO)3e9;*ZTTOHGh%~qQ}}g(1|rY3K3?g*=XmQ)8&+Xq%;7sbtjhb{#E5F1lRBm`?~TN!4L~ zq#SbtX)KNvVO>cjHdhI7RTxMXqc2iqIcZu9SXk4If%=&kXzs^?mVV4@>a$qTGzSZt zcwgNt+RZk!hw4y2p%mF+$-y}@r+`t)L)jxdad~12W;u{m@&4TH z`lrHZd?sojt9zXHJ@$(Vt?>z3O)5HtVCLNRSh_|h;iXkh!7I1QnS+{O*2Bk~$^j}k zhGRPgGR>>y>?dvMAk=2j8Y=`bg)FDiIs_&G$I*2z;H7z~ziR>2n?NRj z$v$dl_uNFjRv~A;l8;%hxGV%Ob?gXc#~=i+w=UNNy1CmNr@@VLalq$ z`NI9_IAIp2-Hcgs?9@*c(pKg`HpM3UfA`Ca>>B;x=MO-3KYm7Q>1+pAiJzhrA5fuv z@Y6p0@pl)YDfS{-{5MPxAa7**cOf)as9dpe)6P({LA zDxdygRCYYh8^!w=D!o#HwhFZcuX&>gG)q#|eNOiYZG@~zdz-k|+?Q^f`tqXtMXIvF z^a%lM7XQv{{=K(#Kq;$_28rCzMJNA;dy9fv@vJ$*mR7M-5=HM+)q` zk*Zf)YVAL14G}->aW)5eG=eZ;BPAw)g&&REM7}^~6Z1AvA4J}71Q;ROLubA#_;?Bv zKT&8UNPfakB}l$UXe$XUJy#R^d7sn@r4R0h!*G2n#>bL;e#$^r_>c<|eq%DG5q6Uw z8imQvegc2?dn09iHkTA*XJrb9TCzCUM!Q*6iGg?ty1Z$$`~RQz&NMcz?7H)mxM-s` zN|Z$H`^KHDVinigtH|QM@6UO(rciU~pPK-&?ZaZ)?=|KiE6tg8TH|h`?k98)qD5- z-Z}T4dvBLq4Uekj_0q^qd3oX)d13Ubyf}6hV7mse&C07|*W`t+%W|n{Sb9!{B(xW9 z0KUTE60a7>u2K`o$ggo1EUfNrup9w2x|`~90#yA-sR8V_Fr&EK2P=-2*$7?&%GRrC z!vH`w0_$#ikAEo+jbcLq-A=-cVAB>)$o3w%q-xe~QLJBM3n)_pjU#bT3N*FUjO9j` zGYvD=u>nGCAOO%5V23Qk00KSUp)x=LDfjUhXBQ=8x(4U7vsNZebJ4a-S3v^-PJO)uTGvl9n`VnuHk&oosGy< zfRr7)-|!5`i`6l?%BXsri|NfXI2I6_0dS2tZayqyfK070h!!+0>EYdYUbyF42fDja z#^B;l9tp_^?qeL5xw?{gzU_GK3}|HwWMpfT5n#sIjR-J5fDz>EM*tWn35g>A=FJ|c zQHSE;xcaOQGyNz18l6vfQe(e1nN~*wGD56P16&!EPiWN@8DOP5h5Pgvt<>Mxq#$!6 zZv!%)!i-@TYLOMyh`Sgd+}d@;xCgK{I>C)b06a=EQbZnVYaR&z{l z`{VMNNRNCz+$(PfyLGB9omAHql9@VKautBanR*#HTMvt@Mcxc{$S?Nx%2#>=^4?gx zyg%6|zcAPfw=*i2>tNluB61@zBv%5%@^b%WxifZMUL3k8&ks$*y}Tf=UznB8%swk` z5O6)SGU@G;cD#UrQhZ%^c_a!zunS2$VAT%SfQq9)c5cO&dK+8~s<=`5w&A~})W4lB zicc*xLarCCrvY5EzBD$awWjVTzV;I+^iGY#QgDWHu+@{A!3)CfP)3BCN!e&Xz|mrx zh08>x18|!FI6^Khwb&SHa1c;}w1pH_h-q*Lq(I1q2Roui+P$?FpLVfI<#P>|k=0cW zRYXe(@G#wgn6g`tk%2I3$*<o(PkcZXXVaE&JlisjniK9LXKk;L50ig)>O>ItYL zBfL05tm!;XkR|4(L>4|PpMCa-v>n<8YbqdEkvQ<(iy ze~0|iK%czZGbp!%opOaOqBVFS0{!wr$C$j-Hz_XB3)nWti z2s65w1esIZrr^q=DOiI}kfkAJbP>l;?6hu!Zmso38LQ1$Z(6qosM#^o6hZ(PL3Cw5 z+*Ii50a$Yf0}hyRcp}!#5oi`V_ImqRgf-^ck+)P=6j!JU*2(IU-&&(N#JfE-ZlxwF0 zu(%olDwkSdv&V7mCjxRA?(-BZP7AW75nCM~qczRy0ah7w!=hrvKCQ9AvVd0ZTWgFE zqk<>{Y=vaX2|?m}gRsO{iSJdIvAYo`2(cjJs1+7s4Mkq9yf-b8fDnLWS{qG^BSR^w z*Ed20755pyHEuPP`n1RhGPYC_Vzk<7H#DkSNr+JlxnL!~i;V&dphfwu+gvT~?JhaD zd82&w&1x7KcVuCXy>Olkw~~77AWL@~?^mE{%A0iW1^G9>8J61Zc`|g~D^pc*nW*TH z3$>j9Oiae%4zQ)N=QymEQ;jlHj<0)-UtP*q8e{UJCn{H~eR8o9u1!Oyyc`^pH{vt$ zR`;}gwtGz8=^c?T^$p7BJ0kLKJS^|DN9Bv1-SX9uN%_j~wA=~x$`!W{;ET#Fe}~)( zb;|Sc9(lPJ78>+Y{|KzK8CYe{$Xm0|%Nx_T(e>HS4hEAZ;K>iLIWatY-tLEYM6`8h{2@ zg}Q)a(qiv{w2b8jmlPmVD-D(zLp<0rYC5x!pqHmp|)@6)%|ek2{DM)ovoi! zYcJLKV8uMNBRn9&VT(Ar2h(e`^Z*W%5|pWZIL>t3ri{f#cagDPm*JLDI@I`aScEu+ zv0nt(#6Fi=VYIL~$t}kUPW4)H?+VA zFH=>(=Lbt0AnF3lbi|6ie(fj8>DlR1<}<;ptoPc|sAGt=?+)s$MrwHhT#VEY z?*iO*F;v3zkyMc3ckT^dt+;0ezFJcNSxtdQY5=%eE)!%0Mm2>NNU*Q~B*LnBXF!8o zd0f->h=y1gkTr`JE+|1p>x`}@f5&6%H@l=}W2Lxv)XKRndGg19I3_ZG3trO@jE_`5 z=_f!>0LWO;Z-()?x6qDsP$W44kX@I5_^TJBt9&!u$|@O!yD)YpCRghFWwNqEhR%kh z8(-zV6Mh-M7j@!%P-XzFnR2{z<*+Kwx5xwlH*p#-D1LjfJSG>bBlvw(o@?!pH#-L8 z-N6z0m5FKjXQN~C`OY4BD;$^4cVT&y!w|EdoI-3XzRbn= zLc>Cf;mh2yrD++=m~y=rkfWtW_tMG&jmvBS?FA$?WFrMJ>vC$HS}KIY#-vT)rJKb5 z=?vLcP(q9_vvp|{Aw-B-kZDV3sTX3Wcs z@WFfyAg#EMvXIjeC=UCKwFWJ9AA;-1dM`qZ=?uU|vBLi9$)LiEW5UrA<5*!FR%vvf zM?3XX?ASdGmy&&CvDoCstT*Tl&`2r>q^GCq)vH+)`JrpkczVt77)Snr;I zK4-d1>%%y%exQV{jvfV>ou-YhBxArBW>)`N7}c0m$f94(33%Toz^NkIRL#5t%xRf(Z+6qS7VPRW7+)?bUe&pMmxDVsl8|igwA{@jiJo+##>}gYrf+ zB=7Wh%iI0Ea;F2^VsW|C-7lZ&g@rdXDbMr|$<5&rc>&hh>oYgy)01#BE~LZ}JB&>0DM$0* zs2;|3g=GvdG9PR4S(qs(_aSfmHk}vT-jo!K*k|BI7ZxsO%3`DYdF2qSI=Gx1(2!!? z*QJy$Vts;u+SjmTiCxBrZwkkc?>7Kr$OOe8)|tcj5JJWR!##u80y&C(Y=tzkATwb# z`pmYpYE=Onbh=OrNxZhOf8)&(4z1*+h zgR4q4Yzb&RS=}bL){F5NieO_M*{SvWPZ9}B z_dZ$V0E=_Ou*zPS-}{wu2_G(%v2vdb91BSQQJCx~ypdfE+Cmsap=v|w+tVPCLte-& z?Z;d)a279dc~BYSOva8!Wf+BW;3(X);|}Fx%-ROd)HhD`v zJM)S>8@VX`XWPYFTq7;TE>oGyLJFD5Q{isFI%|iz;Bs`s8tcMKL5Ovr@LHG|u;D9@ zWxhDH(iCLKhfrhvj0xp1AS1+Rp^fi0F=@2UEX*_(4S+Ki8h{RfO#^~-IccqFd>X;V z#sYxN4lAVL901T%%FUcf!Hm$E#yVwTW=HL~xXpuAfE7D?Q-m0UTZ20SrbQC_=t8n(QbD$Zp%t*kkgrY(0@$!C5$n8I z&&5i7f{3mmT}wi&VqJrj=QT*>db*m%tu*@^U|qrG1kh+@5m-Ey?kFv{I=ZUJkFX=i z>R|~If;^7l7j@gt%8C3U`FG!aNo3(wNhZ6^+!`FICKrB@DH~kJG5kA3*Z^?vn*8J6 zd|5iHwn@+V3h6)NlQ_Pn!Cj^zJ%pF74PQV%UNRqE4&NRWmVIss9)u3mh<{&=L=SkR z9R)jnkk%Wt9~RvHCTy#h_CvK2KMbn|mfCc6hfGz3Wx66D*If~LuBk&_XpYINfw+9C zy`jXK7)D}-zc62)lu^t@ThiwFz zRyL=swNbb;7Y=vGb2v)y>8Nx+KYTm=-n`A}w^ zATqIVnm@#4jsn8|rW#HH5p1)Ef;wpn^H*!HETG^d{1lSNE8U43`ws^+{)+<~P7-iO z+49(|^@TSU1eCUEizFLt*m%Qg z0?zVnD)!kz*(@EqaZG7I16wK9iP^43egMUfXB^!fQPk1#Y`8SFet}gQ>2;Id|{cZiWYN^<^Lz<4~$q)bjOL#x8;{EKDg?U138p@4+ zVYCQ%QA=cx<3>fGm?YF;r(=BB{>qK=oT++A#?TRa|voKxv z#ALQUgft@0G{xm6bQJ)bu8YV-O;~1J?Q%0XEYCzn_DS5tUR$d)_PHuM2 zN^ez%H0{NgwZttga54g-)QSf;pa)*BUQV>_9e(K&P( z5F>0RV4V?87HAe`nGjnOQ4uywX>C;&HUeZ;02#z>Rj{_I z=!$NE3yNdwQD*9KeJ+kSwgqrR`Qh&wPv+Si&~eD>Hn;#u#@ z*WYc$d-{(2-ys_bPVdIik24$);AQx)^Eu`ZWeyx8SKHnz8OPaQL)GBK&Oj%~z z{VKL-g;C(bD6|oLftQIug9x;Cd|BywcA@Zhq3~(zCctGuMz^yYFAS|SZnKse!#J## zAf_OLdkX7;^=TTLhHaD$yroRf0+U4o8AbxLJWZ6B4>rCzW4BSjmF!Q4(_u_b1eM2Q2otO1s zuucIqb{}F&5oGMl&;GC!yA-KVZfJq&cyotfr5%JNj1LkA1aN|kZY1NxEXY_7YO4?; zcrKm$7$*kza6_FmZ>(3BlJidb0I@)^AD%@-tuVGo5?oX($^$`WqV^5Q2r&f@QVTV@ zmKFK1pbFXmuO_v;DhlhQyr34TODc=tCIVn?z}1CvSGy5qaH~fe;S#%xy>K~Q8oHsg zCIP+-er31?EBk5Hx!^HWZaE>ILk05vzquolct#Qn95awDmJDQna_Y$*Kgd|IPnhXC zEBo1U39D?eM;4Q#vhd+0k-1-#FWzdAQ~B%RF4n`cLBYY-xP5;>x(>r#JRAh1V4b1x z`tj1Wq5!q+3W&cnWR?jteEoxa;c`M@j`9kK4V-M(PTvGv^Z>r5Q0$-=aPvyn(MApJ z=s$%o@d>;P=l$A2o$l@6xqyt-v}-4I3$yY1cAcJX31ofO<<*hr<>mfoWxQcX+VIl2 zx6}e;u*|mL3k{fYY^eagfRt7Qqu>TmSPjhZWk-QkxIuJ96=;B0Y!j|A1+#%&e(fb- zTQ$?+8K(YhHIUINquXg9W_k`-Ia@x{Aj395W_YJ}NnBUA)8PWz;fDwyT4EMtcG<3v z?1nW4_p*0OoeXYoSjvxZB!rj_!5wGH&e=Acgh9U?CY;hBV7S0MpGuE&Ko`%Q!-{hx z3LR1h;G_mP;2~00-V|A_juqxA@+|e6Y{5s3Fyl7Xi&3lx zqZ`T8LXDOB4^cl|}V{SdEGhtHv?a9Dj_J_;4xN0_nl?rwA*pGs8JKymb?v zH!JyF@N_EidslHlyts!4VU2z8E)0#kZ^}=8L~u>X{5%Z~j#|U?$%yWMLM$>{X=p4m z1GHX%Y*-fVjsaw^$@l-qTjD>NCyga1C4Q(~eE6zF@uhBug~fi3RCr&r1W@pOD2#r% zYXQJ4xH|~AwP70rRXx&HQZIo$E?8tJkSBsNa4HO_0TOUW3AxZd0H(|(!TkWp@Tmt1J+lgoh-x#;Jhj5G3V*A=-v^n%=s zUXi}?E@{CF<=I>-jhkK4hA%khA!OVT3$_o?@}a;6@P!P)3JYy)Q};8BuVo0pGxcf) zWVFgmV*o5FfNZH{b30?37>{NFhADa0;+kx#%Xq#JLHrd ziion1qow2oo&gzv0+-bRqm@Ll(>1&Nu>T^(vD*5#c{H5_tSFv`9qieV zF}^3Dp(gAi#NQESJhzRVW6C~|Dq4SVb%y{>T3#Ghhn4mm;v8}Z(CdLa+RcvO_&vwc*U?)6FcTwYS|-_uqZRpdA2*>q;a;=)BZiNz zALW(R3L0hscyN-C!1l0qH=;Gh7DU>7>hqOYUEtMw30+!r5K#{GRn;ON7=kMJPXl|;N+AS`r z1CU#GN2PM}Q3;h7%17V-3Ou7{HFhkKNJSXHYoc->QxRmKy}FhJ8E*<9WT_>Y(FKeW( zutMGAK#3jE0Ak$;3RnPzO(BMY=R;u)ZT3OfW`U-4W^ga@(wO)&(+FVuaWZ8qC>O z!aZ5+bH&L1PMTX^^p-l5h)U)hDQ&Afue?%%cY{ zPv2I!fB22f_n9+&@}=-|a`8}90oJnx78TBI`#5sh#?UFWcwVLu>%4RjOIV0p?ghj+ zz$M`|Tn3980PDrMb<$gajLT_DtVKGpOlzwhR$@C~t5X3IV*Btx0L1#>(sDu&4nxgK zeG4*;*r&CHXT({JOq`fsVHPZD(STPEfa57_kQP4IT`?W(P%W{IsY!BEAZyvdNk5tZ zqK2iQS8I`}iwRJ%Ws(rn`Z2ha6-CvmstpZ*7F#wuqgHD-Wj3CWfWLZRzG3AZn z4Z?B?WU>Hr_Qyy+{H#1TcvRda#S%YZfD|aL0l3OxdDUp;JuC7fC~Sm;9}kF@Tgx`M zb30&(l{RRgYNQNbQ@Eu)hr=4qF$j%vv4HfR3`!hn=s>G9BmZW6ja%_G_Cpa^ zZiDCBWu_k1n5z$IkIcBbWXc_v8CYbqfZ3S4QwD0IIzr`NhAXOoCiHCrdfPzr5@1i%$y+c`poM>_DFI$*)Y_h3K7 z$#J{!pEw`@$I{o>KztAgFpe3rjxnH~Y0BpP?0u z+}Egnh}KyH0PKM!&bl;?&tJW%Myg6S$QxJBiX^`zAO3JeCkIL{(!l7F1R%ziOS+fK z-{HrnCjevwm!&#y3{6+N4ofXDEQ<>%%k0Bz@}s|fTVfS?;@z`b!iVbA8Y9F)rL};Q z2X1E@QlErT&R^iHM)h3I{?f5UhPdV#>rS=nQ1qvlX!{B{pw;~Z0eT@Pq$ob9afkTWH+K0 z~?~SFte~*1~hC-!^{AUmYTKNxK68$acfK&!A^kL5j(iu1m$`Z92O+( zGDYi+>$WpBM~5J+`gg#xgS1X6l@ey`onZPb8h~{d12*^_;nf8z%z~8Xw*aG@-M6%l zBd>`7!#cYOar`%?LwL@t`)Wtt(PEd@ZPD`Ls1*HsIm8m7hI>YEArBR&estGXS$<>m)1qmp}%qOszJCU*v~jjl~pV99xXRux{Mj>Y^&` zcEpxX2GP<&qlMS7EvR*AwB{_(|b%ndxc?fRQnUG9Xwaa*AR4e}n&I5#1QJJjoluOM6as_Usot5cA^RQeCPRaA} zYjVXuB^@W(idl=iUEToW4!S?;sk05 zuNUy%;*r6!pmY?QA$0mm@xel>VG;nH8Qc*68Q0kffN`8KT46C9&kB3idC}4$$U<;O zImAw67p(ss_z*%Io{7Wnuu{LhB!vBb1y&1N8(BR->l)UXE-S=*(u5BTr)&%F35%O< zA6&~I+)762SLb^H8h{B_6xX@TpjR*4KyI^En6<wY zSJir0UWE~FD*HVeV&UEz1mJ>dkyUKoC)K5S@^}C9 zIk=QJO?N>JkK((@`fG~ItP-+y+nMk5C$A^OwIsZ3-IxWL**-TPMLK|+HYtm9(*W8< zk-K-~zyAKLRBX$W*4?K8CRk3}>$Sd&mG==?UD168UdAd5q`rtKVB1~V2a*EZHa!D}&{5$Rj;Rn`E>+ ztRNdo4Ykdgo;Ww=m6jp7(8xxBJ{=Wf+}$geT1REpH!h>FRnRLg~>acaAgV z!56q0=6>6z0IV^5)r;DsWdp8xBiu|BSWbzr^=L@dD#MHH?7vC3(tV-jux8Ja-*BN)YE{Fv-<%9rUaYr!@2n6Wdpg_#AFZU;EHk1iiAF}0c? z1F)6QGCdp8B4n*Bc-exhgBHSVBaHm8OoAKg65-yUr_>1q`2Plgf2C zw$Lx`jUl*~Jl+G#AC_IwSt(zC65y)R)=Bo!q`S#H2*BoDa6e1VOZkpG`OE)&OAbja7B)WVQJw7I@t;L5{3APU+c^|4g{sWECLG+?jj0Q^H!JmcewyNfDa%WInpAd z$Ne&LA}IaGgBqF1-abr>%qthj;WaG%Zwr2lk4hRb2m5oCbY zY-7J%higfo5o}|19Z;u?W0@}JY+yo$u^9x6@cT@V+I7u; zNjP^(w&w%81rbI;SQwYjjmWe07Y*Pcb`K)3IEW!bBf@}{xo5CS0cyI3aadIR2oU;= z<)auD!!AXP#{bsMugR_ES&ds{5H^S0VQZweG~>7c?mz1}8O+L$Q8Q;Q!m?Hu0A%zC znqWOsY)Nm~fsYi<(Y!sZR+jA>$&|9)i@aOYEsX?Nrd7u6407X`EdAZx%EwQ(a} zj7@%ktW9A?tBgUFtXwu7(aop|1et|crU*0(Gp3ABvtrB|VP>@)T+88RQ$mcX9*gr@ z01-A$pe=)%g3O548!a)qe@30eZ0JwS#$~3oxtGzM8b~Y5=&Jf{;|N4=Ko8oNc_M zPR?%HCf>vO@~40Fyp98S_s6ibXl*TK0hw-pax5{cC%_`(4WW3WtTkpq)+Na#*N0>w z(Seln=+PRxAoFwmvTzs6AHE~s`_oTL>#;nk*px5*=Y7(1Dk8(@qtbl>?!~b>={Q^q zDAlPI#;}JrylDQNuvXxbhD$sU+)O9}SCW&6#196f12AKdEoE9cVO<>aOYd>yf3!vV zV2ur*3CMI^w@yWO!PTqN($PX2JmZ(?nwZRbdH}Ruz^qq8G-g|eG(2Ovg%bb|%0Nwr zH0_2f0aL#L7J~(u&IVmzw|*#W0Nm47M~N)0Q%TDN`Dg2GI?rxEurotpb3T zijc$p%)ndiIt9^c=WK+adUp7h+*B3ry%jAng3BC>JX3iopa4r_ z^`%_lVk|>3z=MjyedDn~K!spp3>VYUBR$f-DaNhI|P7r z?1X!Wy!;zD<(g?!v6e6Exa!u`Nd5Y1d{9gvbK^#jx{#a%#9L%$?`HUfnNN}-6g~~3 zU}Zi*)`I^`G3bt6hs@AbJG_1k046!)1u|VSWo8)_c z@v6xDo07Z>i)_&jnn;j2g?Dk0?k1$~X=>XOpeLk`Y&G#_j;2P&Fu`|;g+aM@moqQ1 z#bj8L_b$r94_}raeD4eL(%4a{+MXxjqerFxY=d;4Y>>WFa9xhN6l8(jwc^|9hP( za49djI%NhaCkZxzvpq7+Sv~$((!z`u zn&~JGaajXn;ZCC5)D||twXBw=tqp1sa(XyVQ4COP(|R}d`#razRE`zo$%~VxHm-%~)8W@*_`F40grghS3SQrn=RtH(bSt=?7#eatMoUllgP1MGFkH}t7j5RwIlEJeEV1yT= z{ku>3bxwhPsOzv-HFnl7GqvpsGlJ|QEU`;Xa4}(xu`APTkacC_GEzGrt-CoMRD-Yu zvp&Dx)Rh&rD#$pH9$yZ=B-(8602!yv*M55r>AZ({*$6MwIXMk8r>vF6E>Q%QQx;;} z$KC}I!UGma6fZrODeZBf$Mg4%SZ7^a8fXS;bW07~Y;2otCAHGy2r61+INml=5SA96 z*+ht0kZG470F0INgcH?LYU)0J%%2+Ro_bXWJHvnVo9@GYliXzAeEiWuS zj?~Hud#zu^wYdr!qyg~YOhyD5!zIi!GBWc^HfeVwGlB)IBisYF9x{^NvpujX$g1)Q ztyTpYfks!;j{0gu7u2|!=ht)83%8UPdI2(1@z0Qrs{AVPY^j1*f%15$17&ecCMzz( zGwGCu?I-1MUY-Qc=gIGX8_-IANhI-{R@d;o(kOvs+|*0!I^RdWn}is**;dQcd%Cp$ z@#+Zx8E*>3bqC0_*>@~ujSb323#~}aO) zx;nK(qDM|j`{6q2Jm!Wx5`#4aiu3Hd7Oqi*;REUv?GN*R_@* zx#1tvkuq*Zr{vj=OETL$EujMpR)j^iv0m!d*BOwZpx3WAmYH=`xSg&gE1LO&(!!t> zrVs;EoB*@3;No%%KxoBvx>G*5vIbZy-Au0g@M5sbR2p7{9QP4)I3A)EWo0ci4nIUl zrNcZ-YAfl@dW#-Ih_S9qhcd$dG9e@eSQf6%>vC?>{;7Zj!9^>p8P*5^Ps@v`T4czd zR;q#w|4Hv3?;Cz^LB=o_#_cr%7Hm0Yog`!XJox`DxE|JnF$T<5=(8b)9~*vP82?2p zYz4?@q2ZaZuF8Y|T8C?7%oc}~PJ_&J72+8CT35Et435YVDb$_BHK{v^a-h~&$|7UR zmdA7XE`Y27P~&hu?8?LuUaK`;@=`-Typd+S=l+&QT($&;_#ZjgWa-ly^L zzXOkE3RW151)WcJNapAGF4_0dykF^el_2AOzK7VJYqfOBX^~l_V5YLiSm4>?%?;GC zk#KXFGTtmP511uhk%fQywEUmHxFcVDzD9<;JH%a@Cv6AHBz}_Pkl_W`#r~Hl%zIGq z_tuHOtU*Et@gg4b>99Y3fQvz}1RPEAw%uOc&Zz&cQ$YhWSY_iCo!Zjb#fAcQVS?K^ zbUGxHm2tUL-z!%d24vPVAeT|7SgtkgvVvk-z!#>mqZneLEXGjT=k{SXiB z-n;U5|NRyD-CvH&m5%+=Se7TX+l!>Jv`m^ykBaZ$2?-oMBkd<)il42Q_$gRl$Ll3{ zuomE}6<=A6wC=Bw@L{)foNki-iZ&Un4am4VB-4#C8LJJ+z`17WI^otjx!$u)GE~(n zlkPCw$WEQI?ow-~Tx@}L*3vFBtwtBx;BI2y&FF;o1PC4VO8t(rQeS*dRk!85)NiT8 z*Sk)<+iRt9N1Zh7td-WCb>iC%@Rpj+@9YGx!glU!-2n@d+Fm2gQ08`-o>67S+on!016;~rlH-gl<>iUIJjn@#Dvk< z|G?$U^}ueoro3kRpY?xYU1z(($Ep?iweED`{?;#3^G>&lA2J3nQ{EkL{kOwv-tN)? zGwZk2hzrk$a^v1*Qv>p1%43-}mEz+FacHNyt<|d9;wlxFnHPVfLqDZ{n|TiARkO8H zs<%~2CCba$q9byC(_uMXP$Eb3)`@pdvE1mWl((xDlUqa_LO4E^IsVgm%%ANUAxxGNnZ_AgHg?Vx)FHcStt&@`**2$TT`Eq`1p;YhO zAT_%;N`2{OaqZhI6{Q>G)b@39Y)hV;*qSG&cdVE5yNjf9{}!n`vP~LKm#RFccT2;m zUE)4j0__kN++NqI5^1S8B(9Tt<UeeZhw24(cW}*AHm;euYkF0 zviRXMc(AYFA%8)B@V8%)zy6cAnmmVeSl{}eGAViQ+7MkUq@N`=6h31`?zd>>y+JZ zf0u2aF5^Fb_v-`lpML+U{I5TIO@8oq?@03heO_e#Ga?_}LixUgGEaDoK!cK)=j7J| z8k3n^9Fuu$%Yp2PP`~!d*Pi)&K-!6w4~EuQJH9wkmFeWlhlU5Z0PxM>OSAw>ZQ+tE z&fS#7h3E00UxpYVh2(3J zOx{5OxvksoC0;@Lib<2N%H2gAtLe+S{892H`O(~S@?qjd)kn!!WI^!zvY%X8zswO{sqF97)2F8%WCR#v&9sO9;(&&0 zq#Fj<%EIssx|=asNVH30flwpthEW)MQJCT=Ae~S*mb>KMd=JzM01cp^3}U%omyP;V z^9iFl{GRJPeuc1~y1Rh<61{*_S|28QR6oJB++FOFIe_;b{?A>w!}oA)ca#14+xg@W zfQEI5*OAV@Cw(n*y{d(K{mW8L*|jj=w_>|9U0|x}S(ft4oxpFIX4{{c&f|KR=cA;& zKlc;woe}Tn%2fX&o&&EpTdLQ&%66XLnJ(>znCdm&M|>7{@td{ET>DC8J2sn~ze%Fp z8_UX+XTBHnbMQnsZkSH5NZEIRQ!dhL>DI}xIm`dbck1cX&w*=6D~u_Dh8KK3w)C*f zAaHB|;DhADW~_{P@JX24ECk%HjRbhuNu=gD)*TGuVZ#(x=V08@2 zm>$R9JpKB)s3W7LWxhI`C(~GAe2~UE1GHcTEx^i2EHa3ea2bOpQ2>Tg0JAb*DvA%9 z1;nOy*%SaPoHL2SPnXt;U8=0uf~o}%*TIw~zH^;vlGmR4YAV!H+hHY|{rnx*krxXg z#dS*aftJ14tE38Do+Fhm?Wef@C@HO7PT#k>>~X6~?+O0vYN`G|F0YnC_B?ugmi26@ zoIU{{Y&}s7)}BLPeNzu zhc%f1*l=A*=I!{{C#HLl=-3=W!n!q zt+Grl{cg3C=SAUM?HV)>N18?H|N1B?#W0pfNk6{Kf3W|1?J4s}AWb}CYOdqa(}%sz zpG`{fIpSlTdY%e2ozKsMp8CrErC~*~Y3WNv@xd8*nYc3}=R-~_+qUdtp7zVWGX3ev=I2bQ?DysA zlKn5)W$y9n%J!Rw*UIb3{+w46ufaU;M@?6Mz7I;7hqGFQO8*b@(M!v0&-`8b_@`S> zKgd|2o`Tj&S%5hoo`smLn{qz<<%M*moaZ)5=WUl)Q~Im<@Up+lOw&pi(#MfPPB;2d zWb?@?o+q1@KMUR$9>3N!ySVQ`N}r#3{d8omYwf88nSojQ8ngX3`x`0~d{4K2PU^_4 z`J8DEHs?z_OP1*i48f zHwUsOO4en}{@@@!@Fh846h1_wbb(!NcCVD(pFV!o^JZ1*I0CqiNzqM}EqH#jtNtO9O+0yLCTd}ZY z+n%Y1J?^Kk^fP*N*%xB%sr~(Jp4wwFmHJIe02%3Q3C)e>B{#~J3ASYgSuV|`xipuqEzQc6C6PgPeiYo{R@&%gC9Tg`R<0F3qL6G?zYnx*AU?%OA@g2gnq9_80|OCcvDsncI^& zGficP<8sO=r<~R~_0vHHZO(>J^&f0Wu3MXVY`0(qKzlaG4j7Q%*VMv=$kL zEcXbF()-s8GAj!%C%`Cs5}uT;Mn?8x(kITPxipvN(uYf(@G>&2Ngqc&6v)z0N`uJ> zC?gB7gm6e{iX*Tx05z3)D#KiwOLJ*1eb{ulu|#F}03QNmX-FB6Wy-?LW=fbDprygb z3(F~|oN`*bmP5>`G|bW*O7TWvW}&DcGqZN5M-1gb02HIj$|QIbHzHo{E%01{?AjKk!9$wx8Yjv3ANs{B(bMg*aWXzny+k_p$I){%|D~*t2COpnw z2xW)F$)&k8m*&!kO*z9^Af-@hom}CZ7-p8Iv{h!b9A=aS*^(vJE{jROBp1C{u7_#? zEht$BxkM7!o}?O6sTapKEMi@xjBspIy^Ye$nl}fOv8Hxa8W~#fD zAcGt&mMM_YjH7?*mPGOtKvs$jwqkt)v<_OIQbC4R+n!TSIpy?lT1i< z!7@u8!#Y70#x^zzSc}Yp%vxp6WrB<|W2;rxfQ(?;C5mx^LadXN4p=QI1+istdkAIw z6I8Zimmrzt{MquLGLO5j9wC3LWyjwqp9d*xepZigeVNDISDE>*;XGE$j?eP@2Ptbl zk09qYIhF0$kE3kopmhJo`2WlDd008lmzj^%vg3aW%61Ma+p%jXS89JtMp9g70epcD?q*D8x*W%Q&JnpA#c{`OlF55Yr zS~Wkr{Q+8$&m+otO-^My_T%Wj=lB@^e??volJi_pW7OANvZuA xzh@o10oghS$l9Q8?03S;rna@x?xT9;{{yaCdcWPV4pIOB002ovPDHLkV1lpTWVrwU diff --git a/code/static/avatar/default.png b/code/static/avatar/default.png new file mode 100644 index 0000000000000000000000000000000000000000..03de2231ca8e2fd63f4fe8e24e375bb613b5ad40 GIT binary patch literal 48120 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
qQ)ehSY2X37Xu1yH>|k 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 A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# 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 diff --git a/code/util.py b/code/util.py index eb3cdbb..a451a87 100644 --- a/code/util.py +++ b/code/util.py @@ -5,27 +5,51 @@ def __init__(self): pass def setAvatar(self,username,filestring,dbapi): + print "Start set Avatar" userid=dbapi.getUserByUserName(username)['id'] avatar=open(os.path.abspath('./static/avatar/'+str(userid)+".png"),"wb"); avatar.write(base64.standard_b64decode(filestring)) avatar.close() + print "End set Avatar" def getAvatar(self,username,dbapi): + print "Start get Avatar" userid=dbapi.getUserByUserName(username)['id'] avatar=open(os.path.abspath('./static/avatar/'+str(userid)+".png"),"rb"); result="" result=base64.standard_b64encode(avatar.read()) avatar.close() + print "End get Avatar" return result def setAvatarbyUid(self,uid,filestring): + print "Start set Avatar" avatar=open(os.path.abspath('./static/avatar/'+str(uid)+".png"),"wb"); avatar.write(base64.standard_b64decode(filestring)) avatar.close() + print "End set Avatar" def getAvatarbyUid(self,uid): + print "Start get Avatar" avatar=open(os.path.abspath('./static/avatar/'+str(uid)+".png"),"rb"); result="" result=base64.standard_b64encode(avatar.read()) avatar.close() + print "End get Avatar" return result + + def setVideobyEid(self,uid,videostring): + newdir = raw_input('./static/Video/'+str(uid)) + os.mkdir(newdir) + video=open(os.path.abspath('./static/Video/'+str(uid)+'/'+str(uid)+'.3gp'),"wb"); + video.write(base64.standard_b64decode(videostring)) + video.close() + print "set Video success" + + def setAudiobyEid(self,uid,videostring): + newdir = raw_input('./static/Audio/'+str(uid)) + os.mkdir(newdir) + audio=open(os.path.abspath('./static/Audio/'+str(uid)+'/'+str(uid)+'.amr'),"wb"); + audio.write(base64.standard_b64decode(videostring)) + audio.close() + print "set Audio success" diff --git a/db.sql b/db.sql index 3f096c9..0edb46f 100644 --- a/db.sql +++ b/db.sql @@ -100,8 +100,9 @@ CREATE TABLE event usrid int NOT NULL, kind int NOT NULL, state int NOT NULL, - content blob NOT NULL, - assist blob, + content blob, + video blob, + audio blob, latitude DECIMAL(12,7), longitude DECIMAL(12,7), starttime datetime, @@ -194,7 +195,7 @@ CREATE TABLE temprelation foreign key(cid) references user(id) )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; /* -添加6用户(3男3女): +添加6用户(3男3女): */ insert into user(name,kind,password,state) values("test1",1,"1",1); insert into user(name,kind,password,state) values("test2",2,"t2",1); From 838ad04fa3e73d54dfa8e930a4cf7bd74071dd0d Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 29 Jul 2014 15:39:17 +0800 Subject: [PATCH 50/66] add score level config file --- code/main.py | 1 + code/static/config.xml | 55 ++++++++++++++++++++++++++++++++++++++++++ code/util.py | 17 +++++++++++-- 3 files changed, 71 insertions(+), 2 deletions(-) create mode 100644 code/static/config.xml diff --git a/code/main.py b/code/main.py index 36636be..94f0cde 100644 --- a/code/main.py +++ b/code/main.py @@ -4,6 +4,7 @@ import os,MySQLdb,dbapi,util from handler import * from push import * +from xml.dom.minidom import parse,parseString #login url handler class IndexHandler(tornado.web.RequestHandler): diff --git a/code/static/config.xml b/code/static/config.xml new file mode 100644 index 0000000..1ad0a7c --- /dev/null +++ b/code/static/config.xml @@ -0,0 +1,55 @@ + + + + + 1 + 0 + 100 + + + 2 + 101 + 300 + + + 3 + 301 + 800 + + + 4 + 801 + 1500 + + + 5 + 1501 + 2200 + + + 6 + 2201 + 3000 + + + 7 + 3001 + 4000 + + + 8 + 4001 + 5000 + + + 9 + 5001 + 6000 + + + 10 + 6001 + 300000 + + + \ No newline at end of file diff --git a/code/util.py b/code/util.py index a451a87..5f5a22a 100644 --- a/code/util.py +++ b/code/util.py @@ -1,8 +1,20 @@ import json,os,base64 - +import xml.etree.ElementTree as ET class util: def __init__(self): - pass + self.score=dict() + config=ET.parse(os.path.abspath("./static/config.xml")) + root=config.getroot() + levels=root.findall("./score/level") + for level in levels: + num=int(level[0].text) + minScore=int(level[1].text) + maxScore=int(level[2].text) + + self.score[num]=dict() + self.score[num]['min']=minScore + self.score[num]['max']=maxScore + def setAvatar(self,username,filestring,dbapi): print "Start set Avatar" @@ -53,3 +65,4 @@ def setAudiobyEid(self,uid,videostring): audio.write(base64.standard_b64decode(videostring)) audio.close() print "set Audio success" + From a517d10d38d5beaca97227d53634cfa072195bbb Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Tue, 29 Jul 2014 15:50:35 +0800 Subject: [PATCH 51/66] update 7/29 --- code/dbapi.py | 228 ++++++++++++++++++++++------ code/handler/Authorize.py | 250 +++++++++++++++++++++++++++++++ code/handler/EventHandler.py | 35 +++-- code/handler/GetArroundEvent.py | 4 +- code/handler/RelativesHandler.py | 212 +++++++++++++------------- code/handler/UserHandler.py | 14 +- code/handler/UserInfoHandler.py | 6 +- code/handler/__init__.py | 3 +- code/main.py | 7 +- code/static/avatar/1.png | Bin 48120 -> 0 bytes code/static/avatar/2.png | Bin 143877 -> 0 bytes code/static/avatar/3.png | Bin 143877 -> 0 bytes code/static/avatar/4.png | Bin 143877 -> 0 bytes code/static/avatar/5.png | Bin 143877 -> 0 bytes code/static/avatar/6.png | Bin 143877 -> 0 bytes code/static/avatar/8.png | Bin 143877 -> 0 bytes code/static/avatar/default.png | Bin 48120 -> 3890 bytes code/util.py | 2 + db.sql | 72 ++++++++- 19 files changed, 659 insertions(+), 174 deletions(-) create mode 100644 code/handler/Authorize.py delete mode 100644 code/static/avatar/1.png delete mode 100644 code/static/avatar/2.png delete mode 100644 code/static/avatar/3.png delete mode 100644 code/static/avatar/4.png delete mode 100644 code/static/avatar/5.png delete mode 100644 code/static/avatar/6.png delete mode 100644 code/static/avatar/8.png diff --git a/code/dbapi.py b/code/dbapi.py index c29eb8f..cf767ed 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -1,5 +1,6 @@ # -*- coding: utf-8 -*- import MySQLdb,json +import thread,time #in init function please change the config to fit your own requirement #fetchone(): return type: None/dict @@ -16,6 +17,7 @@ def __init__(self): self.dbname="community" self.charset="utf8" self.db=MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.dbname,charset=self.charset) + thread.start_new_thread(self.setDailyTask, ()) def getUserByUserId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) @@ -93,13 +95,22 @@ def CheckRelationbyId(self,userid): def getUsermassegeByUserId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="select user.id,user.name,info.name as realname,info.sex,info.age,info.address,info.illness,info.credit,info.score from user ,info where user.id=%s and info.id=%s" + sql="select user.id,user.name,info.name as realname,info.sex,info.age,info.address,info.illness,info.credit,info.score,phone from user,info where user.id=%s and info.id=%s" param=(userid,userid) cursor.execute(sql,param) result=cursor.fetchone() cursor.close() return result + def getUsercidByEid(self,eid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select cid from user,event where event.id= %s and event.usrid=user.id" + param=(eid,) + cursor.execute(sql,param) + result=cursor.fetchone() + cursor.close() + return result + def getEventByEventId(self,eventid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="select * from event where id=%s" @@ -112,7 +123,7 @@ def getEventByEventId(self,eventid): def getEventandUserByEventId(self,eventid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="""select user.name as username,user.id as userid,content,starttime as time,event.kind as kind,event.id as eventid, event.latitude as latitude,event.longitude as longitude from event,user - where event.id=%s and user.id = event.usrid""" + where event.id=%s and user.id = event.usrid""" param=(eventid,) cursor.execute(sql,param) result=cursor.fetchone() @@ -242,8 +253,8 @@ def getHelpersCidbyEid(self,eid): def getRelativesCidbyUid(self,uid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="select cid from relation,user where usrid = %s and usrid = user.id" - param=(eid,) + sql="select user.cid from relation,user where usrid = %s and usrid = user.id" + param=(uid,) cursor.execute(sql,param) result = [] for row in cursor.fetchall(): @@ -277,25 +288,13 @@ def register(self,content): result=cursor.fetchone() print result[0] - sql = "insert into info(id,cardid,name,sex,age,address,illness,credit,score) values(%s,%s,%s,%s,%s,%s,%s,%s,%s)" - param = (result[0],content["cardid"],content["realname"],content["sex"],content["age"],content["address"],content["illness"],0,0) + sql = "insert into info(id,cardid,name,sex,age,address,illness,credit,score,phone,vocation) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" + param = (result[0],content["cardid"],content["realname"],content["sex"],content["age"],content["address"],content["illness"],0,0,content["phone"],content["vocation"]) cursor.execute(sql,param) self.db.commit() cursor.close() return - - #insert support mseeage in event - #pre condiction:user.id,event.id exist;event.state = 0 - #after: uptate assist in event - def supportmessageinsert(self,content): - cursor = self.db.cursor() - sql ="update event set assist= %s where id = %s" - param = (content["assist"],content["eventid"]) - cursor.execute(sql,param) - self.db.commit() - cursor.close() - return def getRelationByUserId(self, u_id, r_id): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) @@ -308,6 +307,11 @@ def getRelationByUserId(self, u_id, r_id): #update user cid by uid def UpdateCidByuid(self,cid,uid): cursor = self.db.cursor() + sql ="update user set cid = NULl where cid = %s" + param = (cid,) + cursor.execute(sql,param) + self.db.commit() + sql = "update user set cid = %s where id = %s" param = (cid,uid) cursor.execute(sql,param) @@ -420,7 +424,7 @@ def getUserAround(self,lon,lat,distance): #after: update data credit,score in info def updateUserCreditScore(self,eid,uid,score): cursor = self.db.cursor() - sql = "update info set score = (score + %s)/2,credit = (credit+5)/3 where id = %s" + sql = "update info set score = score + %s,credit = (credit+5)/3 where id = %s" param = (score,uid) try: cursor.execute(sql,param) @@ -436,19 +440,16 @@ def updateUserCreditScore(self,eid,uid,score): def updateUserinfo(self,uid,message): cursor = self.db.cursor() result = [] - if("username" in message): - user = self.getUserByUserName(message['username']) - if(user is not None): - return {"state":3,"desc":"username exist"} - sql = "update user set name = %s where id = %s" - param = (message["username"],uid) + if("realname" in message): + sql = "update info set name = %s where id = %s" + param = (message["realname"],uid) try: cursor.execute(sql,param) self.db.commit() except: self.db.rollback() return {"state":2,"desc":"db access error username"} - result.append(str({"state":1,"desc":"update username success"})) + result.append({"state":1,"desc":"update username success"}) if("sex" in message): sql = "update info set sex = %s where id = %s" param = (message["sex"],uid) @@ -458,7 +459,7 @@ def updateUserinfo(self,uid,message): except: self.db.rollback() return {"state":2,"desc":"db access error sex"} - result.append(str({"state":1,"desc":"update sex success"})) + result.append({"state":1,"desc":"update sex success"}) if("age" in message): sql = "update info set age = %s where id = %s" param = (message["age"],uid) @@ -468,8 +469,8 @@ def updateUserinfo(self,uid,message): except: self.db.rollback() return {"state":2,"desc":"db access error age"} - result.append(str({"state":1,"desc":"update age success"})) - """if("phone" in message): + result.append({"state":1,"desc":"update age success"}) + if("phone" in message): sql = "update info set phone = %s where id = %s" param = (message["phone"],uid) try: @@ -478,7 +479,7 @@ def updateUserinfo(self,uid,message): except: self.db.rollback() return {"state":2,"desc":"db access error age"} - result.append(str({"state":1,"desc":"update age success"}))""" + result.append({"state":1,"desc":"update age success"}) if("address" in message): sql = "update info set address = %s where id = %s" param = (message["address"],uid) @@ -488,7 +489,7 @@ def updateUserinfo(self,uid,message): except: self.db.rollback() return {"state":2,"desc":"db access error address"} - result.append(str({"state":1,"desc":"update address success"})) + result.append({"state":1,"desc":"update address success"}) if("illness" in message): sql = "update info set illness = %s where id = %s" param = (message["illness"],uid) @@ -498,7 +499,7 @@ def updateUserinfo(self,uid,message): except: self.db.rollback() return {"state":2,"desc":"db access error illness"} - result.append(str({"state":1,"desc":"update illness success"})) + result.append({"state":1,"desc":"update illness success"}) cursor.close() return result @@ -526,17 +527,19 @@ def deleteRelationByUsername(self, u_name, r_name): self.db.commit() cursor.close() - def addRelationByUsername(self, u_name, r_name,kind): - result = self.getUserByUserName(u_name) - u_id = str(result["id"]) - result = self.getUserByUserName(r_name) - r_id = str(result["id"]) + def addRelationByUid(self, u_id, r_id,kind): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="INSERT INTO relation (usrid, cid, kind) VALUES ('" + u_id + "', '" + r_id + "', '"+kind+"')" - cursor.execute(sql) + sql="INSERT INTO relation(usrid, cid, kind) VALUES(%s,%s,%s)" + param=(u_id,r_id,kind) + cursor.execute(sql,param) + self.db.commit() + sql="INSERT INTO relation(usrid, cid, kind) VALUES(%s,%s,%s)" + param=(r_id,u_id,kind) + cursor.execute(sql,param) self.db.commit() cursor.close() + def addtempRelationByUsername(self, u_name, r_name,kind): result = self.getUserByUserName(u_name) u_id = str(result["id"]) @@ -550,11 +553,17 @@ def addtempRelationByUsername(self, u_name, r_name,kind): def deletetemprelation(self,uid,cid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="delete from temprelation where uid = %s,cid =%s" + sql="select * from temprelation where uid = %s and cid =%s" + param=(uid,cid) + cursor.execute(sql,param) + result=cursor.fetchone() + kind = result['kind'] + sql="delete from temprelation where uid = %s and cid =%s" param=(uid,cid) cursor.execute(sql,param) self.db.commit() cursor.close() + return kind def addaidhelper(self, u_name, e_id): result = self.getUserByUserName(u_name) @@ -628,11 +637,11 @@ def addEventByUserName(self,username,message): cursor.execute("select last_insert_id()") eid = cursor.fetchone()["last_insert_id()"] if(message['videosign'] =="1" and message['audiosign'] =="1"): - slef.UpdateEventVideoAndAudio(eid) + self.UpdateEventVideoAndAudio(eid) elif(message['videosign'] =="1" and message['audiosign'] =="0"): - slef.UpdateEventVideo(eid) + self.UpdateEventVideo(eid) elif(message['videosign'] =="0" and message['audiosign'] =="1"): - slef.UpdateEventAudio(eid) + self.UpdateEventAudio(eid) return {"state":1,"errorDesc":"","eventid":eid} cursor.close() @@ -711,8 +720,7 @@ def searchUserbySexAgeKind(self,content): data={'state':1,'users':userlist}#return the user table successly else: data={'state':0}#the user not exist,return state 0 - result=json.dumps(data) - return result + return data #update the password by userid and userpassword def UpdatePassword(self,content): @@ -761,8 +769,8 @@ def checkHelperByEventIdAndUserName(self,eid,username): return True def addSupportByEventIdAndUserName(self,eid,username,message): - if(not self.checkHelperByEventIdAndUserName(eid,username)): - return {"errorCode":403,"errorDesc":"No Such Helper "+str(username)+" in event "+str(eid)} + #if(not self.checkHelperByEventIdAndUserName(eid,username)): + # return {"errorCode":403,"errorDesc":"No Such Helper"+str(username)+" in event "+str(eid)} if(not ("content" in message) ): return {"errorCode":403,"errorDesc":"Messge Incomplete"} else: @@ -794,7 +802,7 @@ def setCreditByEventIdAndUserName(self,eid,username,credit): def getSupportsByEventId(self,eid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="select * from support where eid=%s" + sql="select * from support where eid=%s ORDER BY time DESC" param=(eid,) cursor.execute(sql,param) result=[] @@ -803,5 +811,127 @@ def getSupportsByEventId(self,eid): result.append(item) return result + def insertAuth(self, uid): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "insert into auth(id, email_state, phone_state) values(%s, 'unauth', 'unauth')" + param = (uid,) + succeed = True + try: + cursor.execute(sql, param) + self.db.commit() + except Exception as e: + succeed = False + print(e) + finally: + cursor.close() + return succeed + + def getAuth(self, uid): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select * from auth where id = %s" + param = (uid,) + cursor.execute(sql, param) + result = cursor.fetchone() + cursor.close() + return result + + def updateAuthState(self, uid, kind, newState): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "update auth set %s_state = '%s' where id = %%s" % (kind, newState) + param = (uid,) + cursor.execute(sql, param) + self.db.commit() + cursor.close() + + def updateAuthData(self, uid, kind, value): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "update auth set %s = %%s where id = %%s" % kind + param = (value, uid) + cursor.execute(sql, param) + self.db.commit() + cursor.close() + + # if in limit, return True. + def checkAuthCnt(self, uid, kind, limits): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select * from auth_cnt where id = %%s and kind = \"%s\"" % kind + param = (uid,) + cursor.execute(sql, param) + result = cursor.fetchone() + if result is None: + sql = "insert into auth_cnt(id, kind, cnt) values(%%s, \"%s\", 0)" % kind + cursor.execute(sql, param) + cursor.close() + return True + sql = "select * from auth_cnt where id = %%s and kind = \"%s\" and cnt <= %s" % (kind, limits) + cursor.execute(sql, param) + result = cursor.fetchone() + cursor.close() + if result is None: + return False + else: + return True + + def incAuthCnt(self, uid, kind): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "update auth_cnt set cnt = cnt + 1 where id = %%s and kind = \"%s\"" % kind + param = (uid,) + cursor.execute(sql, param) + self.db.commit() + cursor.close() + + def addEmailCode(self, uid, code, period): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select * from email_code where id = %s" + param = (uid,) + cursor.execute(sql, param) + result = cursor.fetchone() + if result is None: + sql = "insert into email_code(id, code, expire_in) values(%%s, %%s, unix_timestamp() + %s)" % period + param = (uid, code) + else: + sql = "update email_code set code = %%s, expire_in = unix_timestamp() + %s where id = %%s" % period + param = (code, uid) + cursor.execute(sql, param) + self.db.commit() + cursor.close() + + def checkEmailCode(self, uid, code): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select * from email_code where id = %s and code = %s and expire_in > unix_timestamp()" + param = (uid, code) + cursor.execute(sql, param) + result = cursor.fetchone() + if result is None: + return False + else: + return True + + def deleteEmailCode(self, uid): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "delete from email_code where id = %s" + param = (uid,) + cursor.execute(sql, param) + self.db.commit() + cursor.close() + + def setDailyTask(self): + while True: + time.sleep(24 * 3600) + self.clearAuthTempData() + + def clearAuthTempData(self): + # clear auth_cnt table + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "delete from auth_cnt" + cursor.execute(sql) + self.db.commit() + # clear out date email code records + sql = "delete from email_code where expire_in < unix_timestamp()" + cursor.execute(sql) + self.db.commit() + + cursor.close() + def __del__(self): - self.db.close() + self.db.close() \ No newline at end of file diff --git a/code/handler/Authorize.py b/code/handler/Authorize.py new file mode 100644 index 0000000..a13cfb5 --- /dev/null +++ b/code/handler/Authorize.py @@ -0,0 +1,250 @@ +# encoding: utf-8 +__author__ = 'Administrator' + +import tornado.web +import json +import random +import smtplib +from email.mime.text import MIMEText + +# +# errorcode: +# 1: 缺少参数 +# 2: 用户名错误,用户不存在 +# +# 查询用户的认证状态 +# +class AuthStateHandler(tornado.web.RequestHandler): + def post(self): + print("mark 2") + content = self.request.body + j = json.loads(content) + if j.has_key("username"): + username = j["username"] + else: + error = { + "error": "lack params", + "request": "querauthstate", + "error_code": 1 + } + self.write(json.dumps(error)) + print("no username supplied") + return + user_record = self.application.dbapi.getUserByUserName(username) + if user_record is None: + error = { + "error": "no such user", + "request": "queryauthstate", + "error_code": 2 + } + self.write(json.dumps(error)) + print("no such user") + return + uid = user_record["id"] + auth_record = self.application.dbapi.getAuth(uid) + if auth_record is None: + self.application.dbapi.insertAuth(uid) + auth_record = self.application.dbapi.getAuth(uid) + result = { + "email_state": auth_record["email_state"], + "phone_state": auth_record["phone_state"] + } + print("mark 1") + resultstr = json.dumps(result) + print(resultstr) + self.write(resultstr) + + + +# +# params: +# username +# email +# error_code: +# prefix: 10000 +class RequestEmailAuthHandler(tornado.web.RequestHandler): + codechars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW0123456789" + + host = "114.215.133.61:8080" + mail_host = "smtp.126.com" + mail_user = "bfbrmt" + mail_pass = "hdd2011bfbrmt" + mail_postfix = "126.com" + me = mail_user + "<" + mail_user + "@" + mail_postfix + ">" + msg_content_template = u""" + + + + + + +

社区居民求助系统邮箱验证

+

您好!

+

您已经成功发出了邮箱验证请求。

+

点击以下链接即可完成邮箱验证。如果无法点击,请手动复制网址到浏览器打开。

+
+

请注意,本次验证的有效期为3天。在发送邮件之后的3天内任何时间都可以点击验证。

+

如果超过三天还没有点击该链接,则验证将过期。您需要重新请求邮箱验证。

+

每个用户每天可以请求10次邮箱验证。如果超过10次,请第二天再试。

+ + """ + msg_subject = "社区居民求助系统邮箱验证" + + def post(self): + # get param + content = self.request.body + j = json.loads(content) + if j.has_key("username"): + username = j["username"] + else: + error = { + "error": "lack params", + "request": "requestemailauth", + "error_code": 1 + } + self.write(json.dumps(error)) + print("lack username") + return + # get uid + user_record = self.application.dbapi.getUserByUserName(username) + if user_record is None: + error = { + "error": "no such user", + "request": "requestemailauth", + "error_code": 1 + } + self.write(json.dumps(error)) + print("no such user") + return + uid = user_record["id"] + # get auth record + auth_record = self.application.dbapi.getAuth(uid) + if auth_record is None: + self.application.dbapi.insertAuth(uid) + auth_record = self.application.dbapi.getAuth(uid) + # if authed, return error + if auth_record["email_state"] == "authed": + error = { + "error": "authed", + "request": "requestemailauth", + "error_code": 10001 + } + self.write(json.dumps(error)) + return + # find email + if j.has_key("email"): + email = j["email"] + self.application.dbapi.updateAuthData(uid, "email", email) + elif auth_record["email"] != "": + email = auth_record["email"] + else: + error = { + "error": "lack params", + "request": "requestemailauth", + "error_code": 1 + } + self.write(json.dumps(error)) + return + # check request times + if not self.application.dbapi.checkAuthCnt(uid, "email", 10): + error = { + "error": "reach request limits", + "request": "requestemailauth", + "error_code": 10002 + } + self.write(json.dumps(error)) + return + # send email + code = self.getCode(50) + if not self.sendAuthEmail(email, username, code): + error = { + "error": "send email failed", + "request": "requestemailauth", + "error_code": 10003 + } + self.write(json.dumps(error)) + return + # insert email code record + period = 2 * 24 * 3600 + self.application.dbapi.addEmailCode(uid, code, period) + # update auth state + self.application.dbapi.updateAuthState(uid, "email", "authing"); + # update auth count + self.application.dbapi.incAuthCnt(uid, "email") + result = { + "result": "OK" + } + self.write(json.dumps(result)) + + def getCode(self, num): + code = "" + for i in range(0, num): + code += random.choice(RequestEmailAuthHandler.codechars) + return code + + def fillMsg(self, username, code): + msg_content = RequestEmailAuthHandler.msg_content_template % (RequestEmailAuthHandler.host, username, code, RequestEmailAuthHandler.host, username, code) + return msg_content + + def sendAuthEmail(self, email, username, code): + msg_content = self.fillMsg(username, code) + msg = MIMEText(msg_content, _subtype = "html", _charset="utf-8") + msg["Subject"] = RequestEmailAuthHandler.msg_subject + msg["From"] = RequestEmailAuthHandler.me + msg["To"] = email + try: + s = smtplib.SMTP() + s.connect(RequestEmailAuthHandler.mail_host) + s.login(RequestEmailAuthHandler.mail_user, RequestEmailAuthHandler.mail_pass) + s.sendmail(RequestEmailAuthHandler.me, email, msg.as_string()) + s.close() + return True + except Exception as e: + return False + print str(e) +# params: +# username +# code +# error_code: +# prefix: 20000 +class AuthEmailHandler(tornado.web.RequestHandler): + def get(self): + try: + username = self.get_argument("username") + code = self.get_argument("code") + except: + error = { + "error": "lack params", + "request": "requestemailauth", + "error_code": 1 + } + self.write(json.dumps(error)) + return + # get uid + user_record = self.application.dbapi.getUserByUserName(username) + if user_record is None: + error = { + "error": "no such user", + "request": "authemail", + "error_code": 1 + } + self.write(json.dumps(error)) + print("no such user") + return + uid = user_record["id"] + if self.application.dbapi.checkEmailCode(uid, code): + self.application.dbapi.updateAuthState(uid, "email", "authed") + self.application.dbapi.deleteEmailCode(uid) + result = { + "result":"OK" + } + self.write(json.dumps(result)) + return + else: + error = { + "error": "email auth code error", + "request": "authemail", + "error_code": 20001 + } + self.write(json.dumps(error)) + return diff --git a/code/handler/EventHandler.py b/code/handler/EventHandler.py index a833a87..9897fd7 100644 --- a/code/handler/EventHandler.py +++ b/code/handler/EventHandler.py @@ -29,9 +29,11 @@ def post(self): print '{"type":"help","data":'+json_encode(eventinfo)+'}' info = self.application.dbapi.getUserInfobyName(jobj["username"]) cidlist = self.application.dbapi.getUserCidAround(info["longitude"],info["latitude"],5) + relativelist = self.application.dbapi.getRelativesCidbyUid(info['id']) + cidlist.extend(relativelist) cidlist = list(Set(cidlist)) - cid = self.application.dbapi.getUserByUserName(jobj['username'])['cid'] - cidlist.remove(cid) + if(info['cid'] in cidlist): + cidlist.remove(info['cid']) self.application.push.pushToList(cidlist,'{"type":"help","data":'+json_encode(eventinfo)+'}') self.write(json_encode(result)) @@ -102,7 +104,7 @@ def post(self): content =self.request.body #content = '{"username":"test1","eventid":1}' j = json.loads(content) - uid = self.application.dbapi.getUserByUserName(j['username'])["id"] + user = self.application.dbapi.getUserByUserName(j['username']) event = self.application.dbapi.getEventByEventId(j['eventid']) if(event is None): self.write("{'state':1}") @@ -110,7 +112,7 @@ def post(self): return rNamelist = self.application.dbapi.getAllRelativeNamebyUid(event["usrid"]) print rNamelist - if(uid not in rNamelist): + if(user["id"] not in rNamelist): self.write("{'state':2}") print "user not relative or itself,can not update sate" return @@ -129,21 +131,21 @@ def post(self): writedata['helpers'] = data print writedata #push - """pushlist = self.application.dbapi.getFollowerCidByEid(jobj['eid']) - helperlist = self.application.dbapi.getHelpersCidbyEid(jobj['eid']) + pushlist = self.application.dbapi.getFollowerCidByEid(j['eventid']) + helperlist = self.application.dbapi.getHelpersCidbyEid(j['eventid']) pushlist.extend(helperlist) - relativelist = self.application.dbapi.getRelativesCidbyUid(uid) + relativelist = self.application.dbapi.getRelativesCidbyUid(user["id"]) pushlist.extend(relativelist) pushlist = list(Set(pushlist)) - cid = self.application.dbapi.getUserByUserName(j['username'])['cid'] - cidlist.remove(cid) + if(user['cid'] in pushlist): + pushlist.remove(user['cid']) pushdata = {} data = {} pushdata['type'] = "endhelp" data['eventid'] = j['eventid'] data['time'] = currenttime.strftime('%Y-%m-%d %H:%M:%S') pushdata['data'] = data - self.application.push.pushToList(pushlist,pushdata)""" + self.application.push.pushToList(pushlist,json_encode(pushdata)) self.write(json_encode(writedata)) print "finsh an event" return @@ -194,19 +196,26 @@ def post(self): content =self.request.body #content='{"username":"test1","eid":4,"message":{"content":"TestssCofffntent"}}' jobj=json.loads(content) + user = self.application.dbapi.getUserByUserName(j['username']) result=self.application.dbapi.addSupportByEventIdAndUserName(jobj["eid"],jobj["username"],jobj["message"]) - """if(result['errorCode'] == 200): + if(result['errorCode'] == 200): pushlist = self.application.dbapi.getFollowerCidByEid(jobj['eid']) + relativelist =self.application.dbapi.getRelativesCidbyUid(user['id']) + pushlist.extend(relativelist) + pushlist = list(Set(pushlist)) + if(user['cid'] in pushlist) + pushlist.remove(user['cid']) + pushlist.append(self.application.dbapi.getUsercidByEid(jobj['eid'])['cid']) datatemp = self.application.dbapi.getSupportBySid(result['supportid']) pushdata = {} data = {} pushdata['type'] = 'aid' - data['user'] = jobj['username'] + data['username'] = jobj['username'] data['content'] = datatemp['content'] data['time'] = datatemp['time'].strftime('%Y-%m-%d %H:%M:%S') data['eventid'] = jobj['eid'] pushdata['data'] = data - self.application.push.pushToList(pushlist,pushdata)""" + self.application.push.pushToList(pushlist,json_encode(pushdata)) self.write(json_encode(result)) diff --git a/code/handler/GetArroundEvent.py b/code/handler/GetArroundEvent.py index bc568aa..48adeea 100644 --- a/code/handler/GetArroundEvent.py +++ b/code/handler/GetArroundEvent.py @@ -17,5 +17,7 @@ def post(self): print "username not exist" return result = self.application.dbapi.getEventAround(user['longitude'],user['latitude'],5) + for item in result: + item['avatar'] = self.application.util.getAvatar(item['name'],self.application.dbapi) self.write("{'state':1,aids:"+json_encode(result)+"}") - return + return \ No newline at end of file diff --git a/code/handler/RelativesHandler.py b/code/handler/RelativesHandler.py index afd3afc..87ee1f5 100644 --- a/code/handler/RelativesHandler.py +++ b/code/handler/RelativesHandler.py @@ -1,101 +1,113 @@ -# -*- coding: utf-8 -*- -'''Yeqin Zheng, 09/07/2014''' -import tornado.ioloop -import tornado.web -import tornado.httpserver -from tornado.escape import * -import json - -''' Add a relation between two users. Succeed with "1" returned, else with "0". ''' - -class AddrelativesHandler(tornado.web.RequestHandler): - def get(self): - self.write("

AddrelativesHandler

") - - def post(self): - content =self.request.body - #content = '{"u_name":"test1","r_name":"test5","info":"i am",'kind':}' - j = json.loads(content) - row = self.application.dbapi.getRelationByUsername(j['u_name'], j['r_name']) - if row == 0: - #self.application.dbapi.addRelationByUsername(j['u_name'], j['r_name']) - self.application.dbapi.addtempRelationByUsername(j['u_name'], j['r_name'],j['kind']) - #push data - cid = self.application.dbapi.getUserByUserName(j['r_name'])['cid'] - pushdata = {} - datainside = {} - pushdata['type'] = "invite" - datainside['user'] = j['u_name'] - datainside['info'] = j['info'] - pushdata['data'] = datainside - self.application.push.pushToSingle(cid,pushdata) - add_message = {'state': 1} - print "add relative success" - else: - add_message = {'state': 0} - print "two already has relative relation" - self.write(add_message) - return - -class CheckrelativesHandler(tornado.web.RequestHandler): - def get(self): - self.write("

CheckrelativesHandler

") - - def post(self): - #content =self.request.body - content = '{"username":"test1"}' - j = json.loads(content) - userid=self.application.dbapi.getUserByUserName(j['username'])["id"] - re=self.application.dbapi.CheckRelationbyId(userid) - if re!=(): - relatives=[] - for row in re: - info=self.application.dbapi.getUsermassegeByUserId(row["cid"]) - info['kind'] = row['kind'] - #relatives.append('{"info":'+str(info)+',"avatar":'+self.application.util.getAvatarbyUid(info['id'])+'}') - relatives.append(info) - data={'state':1,'ralatives':relatives} - print data - else: - data={'state':1,'relatives':'[]'} - self.write(json_encode(data)) - -'''Yeqin Zheng, 09/07/2014''' -''' Delete a relation between two users. Succeed with "1" returned, else with "0". ''' -class DeleterelativesHandler(tornado.web.RequestHandler): - def get(self): - self.write("

DeleterelativesHandler

") - - def post(self): - content =self.request.body - #content = '{"username1":"ooo","username2":"11oo"}' - j = json.loads(content) - row = self.application.dbapi.getRelationByUsername(j['username1'],j['username2']) - if row == 0 : - delete_message = {'state': 0} - print "two has no relations" - else : - self.application.dbapi.deleteRelationByUsername(j['username1'],j['username2']) - print "delete relations success" - delete_message = {'state': 1} - - self.write(delete_message) - return - -class AgreerelativesHandler(tornado.web.RequestHandler): - def get(self): - self.write("

AgreerelativesHandler

") - - def post(self): - content =self.request.body - #content = '{"u_name":"ooo","c_name":"11oo","kind": ,"agree":1(1同意,0不同意)}' - j = json.loads(content) - if(j['agree'] == 1):#删除temprelation,添加relation,返回状态1,推送数据到uid - self.application.dbapi.deletetemprelation(uid,cid) - self.application.dbapi.addrelation(uid,cid,j['kind']) - state = {'state':1} - else:#删除temprelaiton - self.application.dbapi.deletetemprelation(uid,cid) - state = {'state':1} - self.write(json_encode(state)) +# -*- coding: utf-8 -*- +'''Yeqin Zheng, 09/07/2014''' +import tornado.ioloop +import tornado.web +import tornado.httpserver +from tornado.escape import * +import json + +''' Add a relation between two users. Succeed with "1" returned, else with "0". ''' + +class AddrelativesHandler(tornado.web.RequestHandler): + def get(self): + self.write("

AddrelativesHandler

") + + def post(self): + content =self.request.body + #content = '{"u_name":"test1","r_name":"test5","info":"i am",'kind':}' + j = json.loads(content) + row = self.application.dbapi.getRelationByUsername(j['u_name'], j['r_name']) + if row == 0: + self.application.dbapi.addtempRelationByUsername(j['u_name'], j['r_name'],j['kind']) + #push data + cid = self.application.dbapi.getUserByUserName(j['r_name'])['cid'] + pushdata = {} + datainside = {} + pushdata['type'] = "invite" + datainside['username'] = j['u_name'] + datainside['info'] = j['info'] + datainside['type'] = j['kind'] + pushdata['data'] = datainside + self.application.push.pushToSingle(cid,json_encode(pushdata)) + add_message = {'state': 1} + print "add relative success" + else: + add_message = {'state': 0} + print "two already has relative relation" + self.write(add_message) + return + +class CheckrelativesHandler(tornado.web.RequestHandler): + def get(self): + self.write("

CheckrelativesHandler

") + + def post(self): + #content =self.request.body + content = '{"username":"test1"}' + j = json.loads(content) + userid=self.application.dbapi.getUserByUserName(j['username'])["id"] + re=self.application.dbapi.CheckRelationbyId(userid) + if re!=(): + relatives=[] + for row in re: + info=self.application.dbapi.getUsermassegeByUserId(row["cid"]) + info['kind'] = row['kind'] + #info['avatar'] = self.application.util.getAvatarbyUid(info['id']) + #relatives.append('{"info":'+str(info)+',"avatar":'+self.application.util.getAvatarbyUid(info['id'])+'}') + relatives.append(info) + data={'state':1,'ralatives':relatives} + print data + else: + data={'state':1,'relatives':'[]'} + self.write(json_encode(data)) + +'''Yeqin Zheng, 09/07/2014''' +''' Delete a relation between two users. Succeed with "1" returned, else with "0". ''' +class DeleterelativesHandler(tornado.web.RequestHandler): + def get(self): + self.write("

DeleterelativesHandler

") + + def post(self): + content =self.request.body + #content = '{"username1":"ooo","username2":"11oo"}' + j = json.loads(content) + row = self.application.dbapi.getRelationByUsername(j['username1'],j['username2']) + if row == 0 : + delete_message = {'state': 0} + print "two has no relations" + else : + self.application.dbapi.deleteRelationByUsername(j['username1'],j['username2']) + print "delete relations success" + delete_message = {'state': 1} + + self.write(delete_message) + return + +class AgreerelativesHandler(tornado.web.RequestHandler): + def get(self): + self.write("

AgreerelativesHandler

") + + def post(self): + content =self.request.body + #content = '{"u_name":"ooo","c_name":"11oo","kind": ,"agree":1(1同意,0不同意)}' + j = json.loads(content) + user = self.application.dbapi.getUserByUserName(j['u_name']) + cid = self.application.dbapi.getUserByUserName(j['c_name'])['id'] + if(j['agree'] == "1"): + kind = self.application.dbapi.deletetemprelation(user['id'],cid) + self.application.dbapi.addRelationByUid(user['id'],cid,kind) + print "agree 1" + pushdata = {} + pushdata['type'] = "agree" + data = {} + data['userid'] = user['id'] + data['username'] = user['name'] + data['type'] = kind + self.application.push.pushToSingle(user['cid'],json_encode(pushdata)) + state = {'state':1} + else: + self.application.dbapi.deletetemprelation(user['id'],cid) + print "agree 0" + state = {'state':1} + self.write(json_encode(state)) return \ No newline at end of file diff --git a/code/handler/UserHandler.py b/code/handler/UserHandler.py index 0899fcd..5f33b14 100644 --- a/code/handler/UserHandler.py +++ b/code/handler/UserHandler.py @@ -11,7 +11,7 @@ def get(self): def post(self): content =self.request.body - #content = '{"username": "test1","password": "1","kind": 1, "cardid":"test" ,"realname":"1","sex":1,"age":1, "address":"1","illness":"1"}' + #content = '{"username": "test1","password": "1","kind": 1, "cardid":"test" ,"realname":"1","sex":1,"age":1, "address":"1","illness":"1","phone":"11"}' j = json.loads(content) if(self.application.dbapi.getUserByUserName(j['username']) is not None): self.write("{'state':1}") @@ -42,7 +42,7 @@ def post(self): content = self.request.body #content = '{"username":"12","password":"1","latitude":23.000000,"longitude":23.000000}' j = json.loads(content) - if(j['username'].strip()=='' ): + if(j['username'].strip()==''): self.write("{'state':1}") print "username is null" return @@ -104,9 +104,9 @@ def get(self): def post(self): #self.write("AuthenHandler") - eid = 1 - result = len(self.application.dbapi.getHelpersCidbyEid(eid)) - print result + username = "test1" + result = self.application.dbapi.getUserInfobyName(username) + print result['id'] self.write(str(result)) return @@ -177,8 +177,8 @@ def post(self): j = json.loads(content) result = {} if('uid' in j): - result['avatar'] = self.application.util.getAvatarbyUid(j['uid']) + result['avatar'] = self.application.util.getAvatarbyUid(j['uid']) else: - result['avatar'] = self.application.util.getAvatarbyUid(j['username'],self.application.dbapi) + result['avatar'] = self.application.util.getAvatar(j['username'],self.application.dbapi) self.write(json_encode(result)) return \ No newline at end of file diff --git a/code/handler/UserInfoHandler.py b/code/handler/UserInfoHandler.py index 7aa44e1..6fdae30 100644 --- a/code/handler/UserInfoHandler.py +++ b/code/handler/UserInfoHandler.py @@ -19,7 +19,11 @@ def post(self): print "username not exist" return result = self.application.dbapi.updateUserinfo(user['id'],j['changemessage']) - self.write("{'result':"+ json_encode(result)+"}") + if(isinstance(result,list)): + state = 1 + else: + state =2 + self.write("{'state':"+ str(state)+"}") print("UpdateUserInfo success") return diff --git a/code/handler/__init__.py b/code/handler/__init__.py index f306a73..b8fad30 100644 --- a/code/handler/__init__.py +++ b/code/handler/__init__.py @@ -6,4 +6,5 @@ "UserInfoHandler", "FollowHandler", "GetArroundEvent", - "ThirdPartHandlers"] + "ThirdPartHandlers", + "Authorize"] diff --git a/code/main.py b/code/main.py index 36636be..f3573e4 100644 --- a/code/main.py +++ b/code/main.py @@ -29,6 +29,7 @@ def __init__(self): (r"/api/checkrelatives",RelativesHandler.CheckrelativesHandler), (r"/api/deleterelatives",RelativesHandler.DeleterelativesHandler), (r"/api/addrelatives",RelativesHandler.AddrelativesHandler), + (r"/api/agreerelatives",RelativesHandler.AgreerelativesHandler), (r"/api/history",HistoryHandler.HistoryHandler), @@ -52,7 +53,11 @@ def __init__(self): (r"/api/thirdpartylogin",ThirdPartHandlers.ThirdPartyLoginHandler), (r"/api/thirdpartylogout",ThirdPartHandlers.ThirdPartyLogoutHandler), (r"/api/thirdpartyremove",ThirdPartHandlers.ThirdPartyRemoveAccountHandler), - (r"/api/thirdpartyfilluserinfo",ThirdPartHandlers.ThirdPartyFillUserInfoHandler)] + (r"/api/thirdpartyfilluserinfo",ThirdPartHandlers.ThirdPartyFillUserInfoHandler), + + (r"/api/authstate", Authorize.AuthStateHandler), + (r"/api/requestemailauth", Authorize.RequestEmailAuthHandler), + (r"/api/authemail", Authorize.AuthEmailHandler)] tornado.web.Application.__init__(self,handlers,**settings) self.dbapi=dbapi.dbapi() self.util=util.util() diff --git a/code/static/avatar/1.png b/code/static/avatar/1.png deleted file mode 100644 index 03de2231ca8e2fd63f4fe8e24e375bb613b5ad40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 48120 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
qQ)ehSY2X37Xu1yH>|k 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 A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# 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 diff --git a/code/static/avatar/3.png b/code/static/avatar/3.png deleted file mode 100644 index 5a3c1c1a31c25e423a3094eb9fa3f73ab6cdd0f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143877 zcmcF~1y3bR&o=J5_~Opu?hcFF;_mM5aL|LhySux)>sj1kaks@5Iq=@k_aDAVnn@>3 zn#^=My{2uHijp)c(sv{X2nbYJ8A(+L2uSw-5dz$QD?a1;WB*N%ZmQDa5cTs!=l?M< zR$_``5D-lX$R8%K|M7^SlJ^5B>Rk>GbiuzW(B%x|UIe-e4(L23r=6^*rj$y<+kaf12#Zaw#`&R^!--`0}# zTfAiV#@z>QV-!GI8TZ_P>$kh>3nvKkavoX7d8^yRbJS A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# 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 diff --git a/code/static/avatar/4.png b/code/static/avatar/4.png deleted file mode 100644 index 5a3c1c1a31c25e423a3094eb9fa3f73ab6cdd0f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143877 zcmcF~1y3bR&o=J5_~Opu?hcFF;_mM5aL|LhySux)>sj1kaks@5Iq=@k_aDAVnn@>3 zn#^=My{2uHijp)c(sv{X2nbYJ8A(+L2uSw-5dz$QD?a1;WB*N%ZmQDa5cTs!=l?M< zR$_``5D-lX$R8%K|M7^SlJ^5B>Rk>GbiuzW(B%x|UIe-e4(L23r=6^*rj$y<+kaf12#Zaw#`&R^!--`0}# zTfAiV#@z>QV-!GI8TZ_P>$kh>3nvKkavoX7d8^yRbJS A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# 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 diff --git a/code/static/avatar/5.png b/code/static/avatar/5.png deleted file mode 100644 index 5a3c1c1a31c25e423a3094eb9fa3f73ab6cdd0f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143877 zcmcF~1y3bR&o=J5_~Opu?hcFF;_mM5aL|LhySux)>sj1kaks@5Iq=@k_aDAVnn@>3 zn#^=My{2uHijp)c(sv{X2nbYJ8A(+L2uSw-5dz$QD?a1;WB*N%ZmQDa5cTs!=l?M< zR$_``5D-lX$R8%K|M7^SlJ^5B>Rk>GbiuzW(B%x|UIe-e4(L23r=6^*rj$y<+kaf12#Zaw#`&R^!--`0}# zTfAiV#@z>QV-!GI8TZ_P>$kh>3nvKkavoX7d8^yRbJS A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# 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 diff --git a/code/static/avatar/6.png b/code/static/avatar/6.png deleted file mode 100644 index 5a3c1c1a31c25e423a3094eb9fa3f73ab6cdd0f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143877 zcmcF~1y3bR&o=J5_~Opu?hcFF;_mM5aL|LhySux)>sj1kaks@5Iq=@k_aDAVnn@>3 zn#^=My{2uHijp)c(sv{X2nbYJ8A(+L2uSw-5dz$QD?a1;WB*N%ZmQDa5cTs!=l?M< zR$_``5D-lX$R8%K|M7^SlJ^5B>Rk>GbiuzW(B%x|UIe-e4(L23r=6^*rj$y<+kaf12#Zaw#`&R^!--`0}# zTfAiV#@z>QV-!GI8TZ_P>$kh>3nvKkavoX7d8^yRbJS A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# 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 diff --git a/code/static/avatar/8.png b/code/static/avatar/8.png deleted file mode 100644 index 5a3c1c1a31c25e423a3094eb9fa3f73ab6cdd0f6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 143877 zcmcF~1y3bR&o=J5_~Opu?hcFF;_mM5aL|LhySux)>sj1kaks@5Iq=@k_aDAVnn@>3 zn#^=My{2uHijp)c(sv{X2nbYJ8A(+L2uSw-5dz$QD?a1;WB*N%ZmQDa5cTs!=l?M< zR$_``5D-lX$R8%K|M7^SlJ^5B>Rk>GbiuzW(B%x|UIe-e4(L23r=6^*rj$y<+kaf12#Zaw#`&R^!--`0}# zTfAiV#@z>QV-!GI8TZ_P>$kh>3nvKkavoX7d8^yRbJS A=(0mtfY#+-0Tvx%o!5kIfoLy}5y# ztB(emU8ueu6j%E7+>pQaKJ~AgfHdZmyW>r9uArko!6o4L3wZy+3B~+Pam8uTRQGDU z4>Y$tFdK8c%e<}P2aF9L4gx6FMNANR^gz1Wzp zY83Id#Y`DISJ^@GdY{T4UP{$b_8ACMKeXUe{F>To=#J-*c| zA9MZQf6z5oSGG!6?u-B9^6@YSO6yAzP<8nN{*6v#KF%Xwu(p=9+c;L*!&bFiu4a}6 zHHdGFoc6Yr;gV@rJJ!AedYOAL>{Pm?{ZH9L;0M>^irc>#+a}kd8E=6@x5b%k7axwa zd+yss)A#-cZ^H}a4SZAA`nM*JNP;!=ky{_L_px~J$l@N|pNJ&z^ZAdy9i_$d77V>28kTL^e<>9tX;$7>)`Yb#iY<(`V z9p^oa2u3dg9_MRP8UHEV3RIhFdW!ygs<20Mc)eRTHgCg5@MTHKw28&I_@Z|uFqUNZ zcG2_%-c^o)z6hW`r6_zWNs5KEL}CN`eSJKD`!AeIn~XB1Dik%U=3+@Rt`4#l5*mA2Uy%eKxoeHbKGf&WDABIfn! zf~4B*_e;vdO232vPXPV<6MCe-@mS+ko+wyP$V7Fbb#QjeSah_nI=thvbP64St| zuGK@oa;86<^{FP3t}ToV-n=dfEc)!_Gbdk~^n2Mf_8RgM?)eC2y!)DPR|yM1S{(}w z!9j+B8QU2fS!tR1Z%`>%`U5b{q|uL1^otqi;kr~jTiWCA7h6b;lHGcG|JK0Ou?bAc zfW2EKBQTSb+;)r%eRW6zwmmf@K@rs-w&akF5ANE>T5PwLum#SBh6VPl>cjJ(ZwPa8 z;fLJpdGP276)bBVYQNLWri5Klvc8x0OO#V=#9y9@Iq=dX@X#vx2~#Zt2KrH7j(gQ_ z&TWEY!}{IjkXBtufO~ZDKOGo?(yNFh(y^{=MTSkXgVYYZrf)S*r>?CmjJgbCj9y>~ z<`v60M~)G2KLbI*JBqMo_L%eoJMcvufr>eH zpKNCyn<2zM-^3y_Q@5PzMu8rTecCn+x*V-SV|J0PPOhwC)B|Qsfmns^*-mv_PP`o+ zLGEg9OEB>!^fPQDeiE#6m>6#EXhunlS_kcd=|n~+E2lca8TU@f7zu^>X&5T2_avCE zx&lcjsjct*(FJ9H<;K!|u3r=tX4+Exx=_@r=i>K30j=$V^9($b0WhW<+fJs`mWCYu zfn{@`MThzMyPo5Z(S`dCMC0R!95vL)H+2Ja+w3(7qDv@NA12fS3$W=W?kbk~l3)Ts zh+`L9k-x`;VAE=ZwZ%_&``$48Z}>@K<{^Kjs7 zdsfPp1Njd(?y5s(F^wfICtuHl;@lPcmWbrv55S8q<))#O1!|`g)`5hFW}BEK@@aG($b*@$mHcIX2g6Y?fAgZU;OK5$nSu zQl{rgFVl&kE_6ee<2YjGk#Ev}RxsyEm<6yHaky^v_|N2LXpjHZ=l<<+S9B)TsW(s9 z!276Q`#{UD$nI~?UAtmHz5$(w@tx4Ly@rFfouuYtPU#-hKJrpl^(S6+^5Fp~v&zb@ z?>6$oL*j~TGq?L(*?EbFlYy@Fe|wJny#pJ3`WsNPosD>nvc6w(HB1mDU;kLDvQEx+ zT`I?NMLp7W4%Cfz%H%Qp((RXMKWyeRV)hz&lqZB*h2p^4devLCb5^@iufe0=#*sBh z6e)e(ZlO*LK(|0)0~^UWrhb^!X<=Xm%_-fehX(**9WB|D)A(dX*ARzx?hg}KhH6Nu8?c`lVZxDmPzY?J5K1p@I;{D;Ods8VnGteclW2_{YabC)rf zdVyu@2+BHU-reiCeNQhgk@c&vfHrR4?Soh|ViH~zr-^H#leL-d&+m3^_JF#Q#s2T` zWuLZwS9R@0wRFgicHu?bc)1(55%-iuoowIZCh(Tn+&U1vHDwD^p;=;r@&0x}V7;*4 z8w=ugfPf4;_{bwu;QCa;dE)1xbx1F+KKAdi$kG8WF3aer(tR!#j1V0xVTU(mGTVX^ zmz+m)dzX`Yw!xooJ7+b!;h*#z(?os@oweK12R`YWMIFl|ePf?SBEImO zYZ4l*!CRni=iN!1_PP@CmnO&Py285y@CScX)!I#F;PnjP1mp8kN~KC&Xr;`iJ%^`H z8SB|~)2S2;NBj|J13WFYOF!kKJb117!PS-FSPhS*+;jIB$Z%s=Gcwj>8jE87N5u)s zmvCf3^(5isn^CI^PZ#$3Ph7?L_l-B0-mL=$O5Bd>`$BP+K4X z+@f2Iq1k;siI|RnJ_T04{*gAF6nsI}d`|3{jRC&=YCk5vre6Vr7l1b>?R%py zG={JJ0s6YPh%aE;*Awa87~s{9@f`$+0DUb1#;pJ^UjH5kRK8wC4okisN$)2BFSmE^ zfEU0)!q@&@4X8Mw>zWquV#NDZa32BqBE8%H`my!lH~%Hz|M>C+FZ??3g|7K=1Q-FL zfAVNIyzOBgzOsA>5jr1o=4~;gdmMk(wu;=_d=|+I6jbvp){=SrtYL9lB?q@uJwEw@ z_3d+4zKgul1KWGTZpzYd`=o2`{?>E@$a{l$4i|x-i>AW^lp3vcy zCXgapJF$}b_qyI|PB=Tw@1QpuckflO|Cmdo|C`e*|8yF(Wc8{n4AfEv-XARd>J1bO ztMGz%`O+0(PPiTlj@Mtt1{T-z5?yo2S~n;RJ8SX1**5=5Apzz(^Q4Z$7t=67EzF-x z-g$@{m{OVAGhy`m(MCgms2p8~stfp;^YKwyR`7kBv&S5m!DZX3qq8epzxIsW8b8-$ z;8NVQNGQ!~kKD42&z$S2%0tlW!0eyt4|+c(9WmRGzB6be+TY@)2;b8Qs<>NF zo7Q$AX}xqD-mjAx8VLeVPtgzW&qKYPElEiVP9Lwt^m(_VQ^0MV?yab6z%3WAT6C?5 zP3PNX!>8BbBFkKX-;qi4azu7Dl14te7&oVz=zWsla~e8 z&VYX0XMjH1n)0gZrO87Mi}C$~h4ZH~ajvj7e2!6V5E$Oh*ZnqM?_{k*99(1KPk6d{~QBOU(%J^6= zd&t2h)IyS?w)MkLK{@7O+62~tBKJ(Y)Kt0Pq`3u!VfB@2jB8x1|&__X@$&tcTqE!@$$d9lnsy*yLHz ztUlQtr^yLL!zJ%N==I!Xwy!^u_C?C&_RU1FTPT_k58m0`2^IKu;rwh(JCE*FGEfFH zH)c~grzmRS%V^7f@asEX@GJzWxwlUd1;uy8`>9IA1c@vo{N}uXMAKvOF7lN{=&2J& zneF4?u)G_Y?R{XF!?LCp)vdGi1)3I>gGVt@V)G7S)fQ1=?+P4&rIO6XanR^B%z>tz zr2Tqa(2CxEhbz{;RNXGhSDYSZvjbi+Q(fZCMaXoe^CRBzp|?CV^X*>Dr8L@){ToyT zgPt(Eh!>L&V-{xg$HD=2(mtH7vj#dzWgQZ7%~%N!4SXBBv8Hs**cal_s1r04jSl0& zT9Uc@EIQ<9u_PlH)vI32t~oU30{gJbiJbk1F-P9dK&;xpw(so&I}kNSwZX?AEwgtK z0Nev9mgWG>U0^@j>VQ6Sj*-J)JSnERh~CKc>d;4pUE>pJ#>f@zrO9UlVdMJ*q48^r z;`%*HO(R&Eq3IaF81V{PHG3Iw1%tRvFGU)LS4o*hng`z5J|7D{2iEUuzVMpGMF!_M z7Efq?MZsEH@)*mB*%H&7mZCZkl$U>vf}l97v?x|VK8aJVbw|OD*SGeimK-)Aik{?Y~a60`9i#*r|9#C_d848?w8n7Xl=zM z+@!=Su+~53NAnMet{NItSSuA}MJ41YT)_cJr>6<}dl2TnZ@+iE$v1|Gr`kzmTArke zyBJg%x04*tfhY|8WXKsl7P{RO^5vHGlk0O9>eI}4RM%v8l}CB=k+gRQ?VFUoDX8LW zIpoeyX#W~Ei=zhJ-t4)GXC0Dm4#Kl1wU1u^(XT(@;rzKt5)&j82&Sb?INYCPbwni@ zu4+dks;iUsGK93nQvI!_GJMyLV8!3#a{UJaNSN(h*!xYobIw`FK;Mi5EmhOR$ORTH zZLL_K1Ha6~C9=&e^b1!WrnXJ;k=yDY^Io0t>E8*(u!V~0tSGasr;-Gdr=bNWq<2x;37YOc(3S$nT&p^aLajhLqb6_WaPUI6R z=j+ML{|z0Gp!|9M1-yy`-91WiO3WMg`u68|Sl3*%8J_JM%ruh=@><+1`IYKe%WgqjMpgCkLRU&3gY)*3X$*C^}hC}{&JMtXc; zx@1HVD+LU-i3uHQg5*zYPC4k|Uk6wrrUjzdo$nM|Q_xvxj*~QZu2+JIW{1Iy49qRq zzkTQ|biFBOl8v{;$iAm`=gr5B)_4v(t#JRVUx)eP()-im zN(r^rzSH+an*%y1pIsnJw39Zc#!_j$C)oNB2?^^ME29-9~Hb z#Yeuzhhf8Q7`e5N&;a6DnyL%gfrr^}(i}W~ad$-Fy9Ox!2AjvZ8mAAeqg)y}Xku*L zvoM^Er<+YAtS#0#&@9h3-jni}3J~XP+=@&{f87C$PiempchXLJBWyDL4+h`+QeK?$ zaQ9{MQd$WiGi`_2;IeAh#ApgEZ1oEU2m>a_IJ)sKil<;D&f&XC{I*u$a&cUe~!Z6s^1-UnmXMdS*tFGFSzNuu6QmI+8Ut z0CrmT73FqGqJU+4n}%mXMrx+RM}{VQshs5D%I0 z9CMgsyJ%^+kSRh>^d#@`=)9NL;WQ+a-yMXZQGbw@*8Jh>q)9CL0? zW^xQRfW`b_oABGxFKql^D1f*iD@v3n^W@W=w3Cc{*^Zj(7w;T_oeE7=2KUyUZvxQTC zDl8Xv$jDU^uy$1=pBd;1nS!E58c#Y>*Cf&DS_*&qd^;31&yTWU+o+NPc3=4T#F%N$HX@rb-2%^hq43ds5qK}?>O2inQ^U*;q z5=WMJVNUL$Thh4BpMBKZBF*6=5k2RVtJP>wF?;rd?SL}9_q8CQ+vh(yzLc+6P1=)lqlnd3$y+xTNm=sGH7QRf@61p^fOVB zeU^RDm@O+rVyy#~9qhMD6TCvSQ^C9;EiMoKutH!tZau3$>M+fQ_~wl`d0uF^OE4ZP z?~XCC%kq3W>&TZsx3< zpN-~~cCfuqlUp|KUCSX&=wjtBVkksn<~@Cz?#Ugz%Q&J2<#urVLlEFY#9|nCuoBj~ zf3N>4T@u92q(XIM>2#-Gg?Pg=bk3ku5O4PONzmKN6#{<<-Rb5?%1nAW8ujT*w5t{$ z@DzUb10?1b2zNnnurfYTOi%wk&EyvydX%US2Bb7RRUyNR#lH(I#TVQle`yiyF4oc( z=bwlM2K9Xjwi)u9$C0T!^)g&;62LN^#aW@(4J@`C;`8lXjJ^fT;2K8E-f<)`yV?Ec zdnw*e7p`1kUF4a)K%^~^`k<%Vj1iv=U&)(x>FgAAIp~swEQ4720O-!nFIGqNywO>% z;BB?t?3zviccKn7^qS{3;3(%KUV4!rBQ7(sYjTX~orTg0!9m&5lcj3$tSP?y41EQvT8fvC9SygbljepMy=d%R z&d6J~Ur4=`?xq}2O?XZEyW;_H+EEeOh*BEIW7s>;Ur%L=^b;1_J(c2e{2^5g%bmIn zT5n_KNVo>bWIFy}Be{oDFs>pf_uz@Fk&f8hRwTa%DaXjAdOMw$&M>3G>hA182Mo-tPPg9ASeQJ5~~NzxBcN7S5&|pe!YZq8mla6mkz~4+9eYnDa0TN z?@#r~i@8(@H#tN&IkP*i$=MGjaoJiPTaJ)l`4cYY!rF0!8PD`W{Q{*s zw0D7`o7eNUCbySt(F0bho7dh2l7e24`A-JY#3{*M=-H_3BGEp7o%qZR(6X@&_jIP z)^60^UGxsgEv%s>`0KC1of*Q}Ox2e3H>mp1xdyGOWyBVAt)Yu0kGlL;l>M>c~H2- z*yx^7ekS?B{LLM~=orB=AtXX%cjK1{{HoYO*qC$v@MaiMW#IKU9#8avxBvXdkQwm& zHMl{!<)e75Q_pRjJ+H9HUQP#@H474G)`84&hhgMn4|Pu@Fy`LdVZgwW1(hDfPqo{r z&kFOI%!%g=B5zDX`G?`WlunnaCi}P;resvrY^E|RXgDu9D3Ea%sG7huj{PxV4ComM z+x1Y;iPy8}`$}XC>N;W;GJ^I+PH8u}=x-AoN(EBi+51bk+boLl+@ZUvARr zO;EP65vL?v5&e3^`@dp7HlmdUNV;30mMb*}*9!FZgQHy&?ER2ODudNh~*cr;vYnA z6BDjP{wu8*#4_F2r*iUB`b0L!r<3E+)db-rQV<@Vi^<*dn4PE1z`&Z-b_9x``?WBa ztTw8IAqG`c8I~Ah0ATJ!ePhTUY2}qrH6N0ZpmZ>lN6E{v8oN-^*6DXicFR*FQP}4{ zwI>&Zm^)e}dl4x|x_=uWMEO8_%EeW8Jc&5lD#)Le;mah)e4bnoL`f z+f!t4^9s9ie)s3%*EX*k1YW%RfwvJQ+A>Z_Lor02kB+sHvPtImgyu*(Y?v^L406MK zWXKczAi)YzY(DrJ46dbVc$*%fR8>#k%6S-KOGLt*q{jTECz43L+xVbk%{wDmp7A>t z>$tk?x4K64xPSEp_8Mr@Pbt^aKR0AcgsI8*Z;a~0UmMm;JE%6;^%a`_N;o*vuwRF$ zf4e>bd?Y4rLjCur5;4c(Y5bDlHF!{Q()dRdC#e9{Hi5BKYlYNI9g)UTWEG-{qYB1%YJ@fsgg_r72xubAw--0G{&tnpdLM9>o0*^ zSz!k+WS`Id*;Ld|Jy$y0VZmQFx3O{}KsH0iO7cqj9U+w?QPGWcinUERKF#(?&W-~s zKkRi(?Pn#qu2s*;=0?pW3Tdq)Z2^j{al|plusoij)7ymkRP#s6ijt7Tt4Vn&4_jXP z#gPSV?1XwCqrcAs-R-5pY(L2a)yPj9o*uq_boduslMj778bjN=Bs9d=05uM%7BzQR z_k6bsHb`4d=w1En44HxbaPTA&-McuGt{>jJOT%u9`$n8~C=oAT!?V&Xv$0x1YW)m-WjiS7Z&&5WbtRz;9=GxRX80J4R@8V?(UWelf898bdK(=T8 z((prMpF%e?p)SOpgwcg!k#H)7W7`S0NjS4!47SvM)`HvEdQ=oGccQ&~yi*mPah-a~ z_MLJtlE1yA?(Gx`Yl2=mqaNHuK3qs5Oc1h3vW`do>Cj0!jZcBwy+OG*1@}|Q6DExd z$>I8!`DqvwVK<{)eT%DTewk47oPA=Kym{G)+pGiXOzpCNFw;wun{+*K!uipVSvN!G zla-Z8XEhY@#+3Ek;@?qQH`Cu+nGpdF;pFE(PNJ?0#q$1r*!D)uFvoJFbYp|AKPn%smg z8@StV<=Lw%2~js=+`Z(2PjUqwRp zfmX;l3GJq@37?dIOLSO_B1|tTOF7q6yzK8#4swsS|%mkuAY5sTFu=(SS7T zhmMvtKi&ATWTqJJh--UM&}ns|bi7X)`icf^`w|zQe~SLFMr?E^5T$`g+-68=jd_90 zLTh}1-7p>W&B2Av3X&HA&dxMXt<~D6K1wMGQU9)JFuj?w$rV|Q{Crb*)F>-y;6$w> z_*EH|qyoa~3ezgjgZ)e7pmK5&hJ=on+S6UQya8*$d_(7TFPYU6p<0zf8%@0Z%lcGK zyNi5lm_+BqbF#@@v_6fJea=3qX)9XI?#L|wSVq}=HjC8hloWwS4+Zr*DK~5cC!AMZ zCvw4)Kcm~9=)8LH@$i9{s~6r+02!f03^qFI)LlFE(N?LSHmyFA)_vq7y*R=(O4Z~6aY@Vuv<+jpxauHZz z$E%C^!9r9Zo!JI?DK8t1?tWx05f) z|HVJyhe1==Qwj^B!%}; zV_^#Ow1m7AQni`cFQV_!M5F-o?pLy*anyyLJPfP-cx?{!Fef+hbsD^X4eny=a7JMm z*35v?k+(U`PJlh?Er@9UpFkb?o>w?AWV?Ksfp`5nY6b|g4aBtHJ{wPFR@psE5)WVx zU2*CdKIZ7|7GX69Z-0L-V2%JilkPv|$>a}EHl(%21%zd7>^XObtjS$ms5TsHmCvOB4}=-$Y|AD@K?!qbXRV{Wv&>vJnjk~fap$WCTj9aa-*mBSJf zWXyPGt>#)G=$;J*5QN~mks|Ufd1lpcbG?#4T3ICW&=32wsvAXGox-&_cQ6L88R*YY z=kl*ca+t-@%W5T?TF_qyKt)d^M5xn`mq?Fz-yf7hZCuUr-m={Gg~g%BYM2R&QN`QZ z0*zGrNa;cKbu8UHXO7~*@cIA)JK88wuX|Uh3ZOF$0Qm*?C ziF#wI2iIKx>6#@HW~lx1x#8#?Xo9-8f)~6N-j@O8U1rE6RZqC#U_8;8u&L<_@_P*&oo%S~NmB0_N$ug=QL&ba&4E}!Pf?x=Tg6-BQ# zJe}0oN{%pBm(;(Mt2B>9&8$TCP|kt;D6XeU1+@L^(lh|6xRJ!$*72PKUFmT3wU5`Q z7R}3XIuv|h$ZQ&dW4JkH{`vawYrD6L6rB`l**l<|V7>~@9}0+}Qm}}?AbA2WQWjJRRW1hAg2*3`Hesdi zcto&vE*qRfQ^yl9ls5BnncVowHN^e%lv`0onGGdB6+<(;5@wrfXZw-(LU;&tzLYa~ zsF&HvH!sp?qECW9sBMRCOUb_9F|HJz@L5BIF`CF>oW>Qxvp(qe#0=xu91eoB`{&>u z2I8mf3^YMTcRcMI$Jw!FaZw>?#YAkj;QK**=J!pPeHGWcDnnD{8{klRI<7D9dLl$+>KMAWsP^uHGzB6# z(O3>TYj?K{c*G_Hp9)vQQ-;)-@Ii8Vy!mJpvcdh`%9>+$+XSjKscYt5Rsdk0t@dQ8gpn^hIy+ zax$r{Bh<+!N7y!w$=oqS*f5R=Qq;WLvWMGq=-F@cz}x2LDAgZnbipCs`VK!lgPKoh zuumSeWi7p~gXzB=aT&7eJ?sQayjh*s2>!sUR4g0vR?MuzuH196t!#){J^!y}hcrkzZE$*bDny{VkP^peI|GiZ8;jVKMz=QT`(*$b&70i*J5aY3 zf>1V`N09WDR_p6c3L}MtYsx<(x=O0pI{?nea3>+DZ|tl#R$AVWcLasM*cn|N!!&tR z7waaWd(wD$I&>v4aMH~r^6V;JABr{xVy4kulUZIg-QhZ(b4qpZCg`8yYUGY_R2Y+H z@D1ThZ&MU|>(isVYy8Vae7$(RS?l6-g?zdq;o`9g{Vp^RMQ05fut}!gw!dy?FnSMs&BnMQe5D+gX(NcaMcN-=JDEB#W6TAyyDks7C}f8cNMq)}+G=g(ru> zL2mgu?WjjGfyU<~6eUH&0pq6zLUt~b&(4u8~ zIN&AG--y}Y6^CtV|8V|%|E8IAQyGV*j#kS?gW`c%E)$?G2`j3N;Z=`?k^2Y zc9&Uf$#k>{J=(#Q*)<7nB~E5J0ouFa0mGCgo5&*ZEu$~xHcaH5H-0!%J9VgTRou2q z0K1sPWVChIdXMg5&FOpg=CE*X4C!2*HRC?RP#O?xyB<0NULXv6@l6PlVgo{q z|0+fj*fsezX2uqo_WC#ZSuh?td=d2_oAXy5dG#XJH^`}~(imY{qJs`a<@pYF@{;6v z0()Ke;b)?$ZYEqLfVTi7IInVSG&f2Ty+W2FQ2~d*dLc_Nk!m`Aw#*Vy zcfuH}LX@7)|55$-8UR^t*ChVrv|yU{$3eGM9AUI{O{wkO`r7MZX4y#~p$D&rZQCGd zcbd2L7+A!{1@VN4LRr%H``dr%wMpmY@bE%*R*ctrN0@ ze*F=bK2b{aStM5dsq~>lVkD}0a#Aj;dGR9;eb+h~^*<0pwR00f<&I5V*h7zMkXD7i zqZid8{rzm#*5z2Ar{3UV=n!6_wh^Vs`6t)s-hjv;67xBpu3z$xL3bukFkVXFm%{D7 z>5E*(z2}$af2roTTUOYNrqL>;IX0AnesOJsu_%c=8Kg&XM|FG}N4BF}-&v6%hH5iO zWe80NPb@|)dZDn(e4|yksod0fG()Ryp59K0o#E}Jn!y$ZZ|`e_d9<~XqG2L*(uJg| zqCjr;tBlw$>O=x6Jn;d1@qZwMCXL>x^vtYyvdJS<=|y20vgG0NCm0*! z`Z1)XfuBb3?1xV=8b}`TP;8%Y=br@;*&p?I6?czskVJcWA@hrLt)~l9=D=cVJ_x3$ z!1WZ2*ws#Fb$IyVDtS3njgfQLTTmldVigt{O9!E`R+5P=Va;53(KLJPzdeJ`Pa!nE12QQ#+TPc zi_FnGxxYj+r_|LC&SOmB!Iiidv?>Cz=E_Vkf7gQVIF3XIh4y{O;+u zNt8uHhlV*qQSP32o{g+1tYCsKRZye$aBUDI_biKfvZ3XQ)->a?h?? z$*5kwOFrwgOAfyZVqA{@=_M09%poiyl_ zs#4=rpPt`LzQt_(2z7}2Nan=n3+sA`kzkzjb!F-H1{&gs?{2Ky8nGPE9{8jVW5-RN z`uKJu8vKj2=oZU+G4vHz8yvEJorTR{MTQRM!^=7lizmzDYsb_-!}G{04`@KxetsdD^qo`AS*^ z9@V`Tzg%hDFJGmVmzffOwG#RlMWP)43_0rk-qPO5dm|y?AeLL$2Yj@!qTV_{Rnwl# zU(UYgY+po%V?|l^-SzEMmM?N7@1X>`h~fladMDvGH&IJngilppJ(J}Dx27AfL$~B- zRvWw&w-wh>?Mdr*qg|ocni3{_>sd(vY@WOcO1JCT^y0at>hN#u!-QxE@kphL!JVW# z(|=NhIDTD4VU9I4gQRgq?jo2;a&bdLm5(&rXOq!+c^YRKjx>ESf3Hf3**&M-QavX- ziXYfJekG7u=xtC;WRq9+3Aqy6*Bl9Z5ys1E7H z9$sKM{<@FrRpzc6n1ltuMG3 zor?+R^en>jav~b6Ii=MIPwj2a+K8!^RzqeRKw<}H&v30ayqms=6##N#Z&yqw*bP{+ zm1A+VGiy0^zZ@(^ya|`UaceV984=qWHyfiKA(lj;28xr)(c%&&xFe%}D1;47`mz*k zBl0&jhT0h=$s8C5uv7e}k8at3?@VxRsJjVvNxtS7HNzWH!V_`}c6%er3S z0r@|6E(PGTxTzwQJRvtuKTg+20U;ROP5hcykO8mseRbHIP015q*Ugv*0FJX*(zF~EcUZRXp89)3do6@F{E^&v0~ zeo@g!pl~!og^S&uihG;ncA{?P{qFdB#8!QyLRmVEG6i_k5j^|IPbeYw#dx{v>C~@u zv5N`!_SyaDS}6ZTl62la&My4SleDSDFSPuQ&3yQF9!jT#EWtH1J<}r?k&&G566J9j z?W(u9T+Fj1BealhSh`I>(vf}WltV&&b@aVpF~2?2)cWm!Kfw)m1itU?BZ+oE&zCWS zOa57!JFwQzW7apIO=v2@*aO5~Nf>r-+G| z=xA8g{aE&h1VSrDs<(HwXEPKn-bzd5hyvC5x5Xa1zSzHa-c2R3mL@U&etN0h{KbnC z235Mggc7~K@J@cx$u=_$=waU|d1K}xeuk-$Wgk|pLjV&41xbw@56j9ANXmqiff(OB zSQ&375u~*=d3_%UOuw1GBiKPc_y46rS+zRQw!&0;);d^p=BUp*AAWievb|z=f&VYU z$ohn8ae_7<-y&pLGKgaaYj>9_;5QiA6B?9n^);00h|5YrrJp+f*O9B{0ww1Y$AU5i zf!x9N5O#U&LPubo!uk!mkSdQ(wd2U-pH>E6+W!GNLBzfglH1}Gfu@C>n3K)|f^hl) zCLf(dQRW)lzv<53zn<4w9#vWbnUQpm$(vi2v4HNRBTL{#l^a2j@q)@tQw3D!l^a_e zWcm&Mx`MJ;f&X*#w(pU7Q@AZAm62{}e3i!j7x#|f)Ib&bs*|v{DjA2WGtgg>f<1&- zWww4AXpAI8=!Du67;;iAF(If6^`{H-L8Y&kYSR)Gxw$K-$+%&KlJCW7 zrDXlPx}w6vO^r)d$?&v-p<{)&E9!%M&>X>IGhFP54@S4NYb6C^PkaDc;(gJY;D@%P z0CZ<^c}6Jqq|#}nFl0;#A*_Ox`x2nZRMeIjqSkfNEp%o^5Mq%EWPJrO=q-vtUvb>L z1ZV?w893UOkF$rQy=)K0PqgE~t-}QUB|LsKidQdrz2`3R9{zPfrf;inFVeR+US=%) zm~T6-zD_S6Z`L8kVPWUi{oO*Ny{Z0AEit<8ZK?2&!Sa$g5aOHS6>kD1g zj0{C|gJ8R+l8=>Jo8sq*JD8PxvsXNh)GLB-;@LS&K0lAwj|stp!%o=0x}k)?;2#Lh0(ZzEcTCV zDrr!C_2L+RCtcZ-QJgzkheNH|7--Bwe?@(7X_U63CdVqzALc-wRc~?x^u~MO~05Ls9>E zaP=gI<3Ls%_AyN9&teEj7uA!&>oTKA%(BU#5jI=q`v>Qypfb-6gnivn||+K0%R&TjA5gCj(FxO>%=vj9B4#w zN+61P-HZ8WlN;lO{)PhF7(0M718ulC(u+G6hw$Xq7@pl{RPc;Id;KMKj}ov+=fPdN zu?PH2$j#hmhjA}qvRsUqYle>(d1!qd4Jw=Eu()T)c~>~ z-Z1UvOQF>UP2^2ufspQEJ=T9;kiDzG|2Z=K4!y9-=dS~qY&Y>@1XC|ZRnqIt^PM=< zmW4x2nHXx$MR$HIolcl?Vim#sho#$+ys^5-Ks3aK5-9O#;j~Gh7UqWvf5M7xs>GX) zi;@liNsB0OcSgRO6Y^X+b#_uJa&uNaiV`x`GhA$9nA#TWkG*LTIG7iY!9s?3g$X!X zl8nO)RSp%z;y`{34sv>k4r;I@4uhrfI8+>q{lziZR}_tY0!YBNmyqfsq(r?0p18Ko z^bpN~{`bX`SsUvy)A0xp8AJ2yf>O+rltwW4?h@TIDMcFrw`TQ9K*~f_l_Ax zmA%F=Q_m-R_kA_KCnEi`@ivRe^q%Vb=*Kahf0y**Ep`mkZN8EC2QPz9%8QfbnuvRn zoUrlJedub)L0eTi+AA_plfyrT`a%qK*K$4{rRh;9;~!K}Mhu!{n}%HMZ>z?U-Ub}o zSA*jR>-mS;O9wW92UkY$q|w;I`nuFcW{_M2!-$iF*vy>d zrmR>1*<26*4YZewNC>7tHmQvOtAR`&Tl#*2OkcNH!JXf3Vhj_{>Bc5c;n9r)IKHnK zNA~1mxFwI_WD;6ZLQxmxr<_-PM4$p$YeEF}Bu1h+F+#yiUiwiT;)|+4IyPSc*#g7_ zUK+q0)wIyV3FUNaHG$q}4D&||kK36LgznT3?5B%5K&NylKTd&bxGWW;Eab;3QZYn# zbhJDXLlsFlR+WO0>Qprys!UcoT$!XaSV0$6l7It+gqwhmz>?`c0#F>7XfNmcxoj`D z5s2+2{A8+2K-QBNr64Xa>nlsbaCNKdyk4IKS2(qI* zu&2@qFCIkk`de!CcF}tM?dy92GEV2#YWZUZkWEh#Waz=%?4ZhV(LlzqQeGw^k6F-- z8H3F9CL0$L(PD*NWV+v?`Gv?mV( zHR)($2-g%BK*tr#@G%nY@q|}QC>%r*3W*qIS$C1uj9B8gaPgNQAl;+XF#VQw9nVyR7>TH}pmcmdp zPQ939YD%K1#p?C9ukWcNGh;$lxs9bEc7(m(6_Ehc?i<3FFT+vl6g_?#A7|8q)!UM0CJ3^*K3?=;-ZVl?Kt}29WyZahrZ@Q8l5xS-Lt9-^!L;YwRHOBv_O@f(2*LBzRWmur$rM&(P)khK~;#i z%Azm!Vd&`LOn~{Kf~pGiM}1fjU0XO>V#CzSMnsa|B`FVmnK9Ux7l(nO1RSR88Y*YV zNU#i5B;a^;3dRVaQw?c2RiA;=jhgd1S)YpYdvcU6w&&qeN4}b#Yvn&PmtAPfrSfsE zEe~g!vvE>@R+oVj^_e)?kcF{ELQWd&YZ;=}W#VXc8Xa4z0-H>S=sYDHm9X?E!`4G( z@d|4Dis{-);?T=!XMPmg7;1KKet(_3&Ac4v54Ymc_z)ciVWyrLh1SI-vf}z z#SqD;7czX0Dab|)H$gxqk0)u;l3_K?-=uF@i-Bw&u7(05l}C~aWh#RK%8KXiy@;-M;Qv9tV_`# zMhV2uHfPdtiR;QTz$*7EAQR~z()tWt)V0fHtWvzTC|el1Cy z@&v#b9lktYc*;=G-vpV;O?(H)jF-I)PTv=hy-TLgaGEZc4ihzsh=`xH7r01ffL4C> zZ6#TIc50CIw1w9=oQ`h?W|rE>7W91snQ?*qxb~VBRGFBons;5EsPMw6s(RAk|BdkMb0dJvP(89L3;JxFFc|11Pp za=n!^BgBjyi(WzXvSWO&|6Gvi+v+mi?p^wG_j_L%mr+xxbt;`nyC!P6dZ)kw-1O_F zuEX?UUei`gPeiaT?o@Sku{!--XbEISGA>lch0FA_uJ-|%@tb&Fy%@pshev?dW0-tA zj4Q{R=*CKMh!t2Rf|e$rpP^r8W|VSNm6AnI7gp@+qMVq(OyH#&{TV)r^Agb2hWns0 z*bQ|N-YW65KPLtQ#R7>mhIN?=UgDGlG9m$xl7x){EyMJj!G$e^jSJFYW(qRhrRk1L z2bm5^ftWz;q*Bg2&_)|HmnLDSIJSAn)zh`rrec6_JHT*Lu8Y8|H7gvgbgFxDqOpe# zv#TTxy)_vakaIfGj7PT)~i)25<-qvXW%#?A#f28Dd2PvUTp*rb#4!# z)tb2gGV0Bc(EvIF)QmxPu8qqHv5TGgxYAvO@h;7+DWGw^tdng7cBfl1=OsYXC4dtN zzyxk0f!nbLhM?3?T^a^!QWVgnt*k94Qh}_EZmc~o79IHsXfIB{o{Bge=*q*%!*v)x z(}~CTkE%*3Fwr0@4ukQr~witvgMd-mk0_R#L!1-yE2 z1mh!h7^53I)|ii>syyt?OHpHW)kgTMVXNf@B1OKg^9}nFPD&Ul0BhxTB5`ANQC?_H z@KH&phl=AFrlqR}_EU6W(zB>T>~ePjE_E_Y?8u(ih4w7EFb!rp$n@H6lpB=?ZNqm(76JMTGZtUzpB}O_5)oaoY7G$6)HdGA-Ex?l0iSht%^-f9| zgI`|jCT?s`d;~g@qf}m*bO1C&`4VEj=*$Ynp|V5;0@V&iIEWJy@Ccv;U6~Uqqm}UPtWLrH zmRyxED-V}Hp(}g+jA5lX4a0qvo;t)LI ztTdwMFNW#Hjwq)lV~xGIa|n0Nb>h;I8WmQyrADiiiK?IghL2u!V4e&mT@=J>!vawg z8lZB)+7cqslOCr)CgXakhW%Jy^yNpXM}(yDTtYK(IU;H6(!)W4%@u)=0c1MNw0UkL zz#_md5I8c`;G}^}2iTR~B3$h&R`UWX9b`B6mEc;R08N9Lfb4Rw20nc|9cJewq@@IE z0<%-i0y7O{I?QA$?P=oD#F-s$%Eb{n%mWq4s=cf$FNR@eG+Huv9Wo-(!ce-sJQ=;U znHcOS!r7rF+_}6DFCLBXdSBF>h1@IN8*R8G?H=hv+5ELYCR%JCQ|aZ%c$x7r-uC_a zI@9Ivl77rLmcLPdcpgR|lk@s&XxYfnGE_OT8P?au>hyP^C6E~k(z^=NV$!#h#(b4Y zO-Z)CK2V~Z@9UQ%c>Hh>&z}x)*+s|@Di1I3#pPp7IL6SdC0#Q0!%cH zi6Ng3EnNaH1uOv$Kg+xVnYb;3bckKsTcW1&S(Xc|uJnlnUIZX@rAI)x07?OzOeKsx z-$tjnCqqfv=QM|w{YIPFLdQTBjyGp2XLh7I4FeS^YN(%%oG3J>g-~J2nYHA`qB$=b zdrA_pmmt41(u!AKj$&F3<9r^IuNKA(ll!H=;6*{q=sxTB(^&etcWoom*Gm~N29I&M zGChX=*|^;4%Z#BzaP(8 zik3j8-!RH}xp84yO!{`pjTs7?b`1HK=5hk<m>I@KLcqKiC zlAwCAosNj1>$o^FhL{2}&5>yiOb;JrDsD}rJF%+O>S`i^fXLh8s z7?+N>;qI0Fnk$o+8qZ!(_e$=M+#9XJvSQ9H^jhlo(^&dCW4&uT9Xk4Uiskcu{HqyNL^UdTkJ6dn;6er@UCVD$GlTkP2XaJ}Nt3LQDm* zXw9v)(TTMs%Ycf0sEP1EL#!9tQv=bT6RDC(1z-}6=}zqY9xWB(l7yAi#Wsd}hK72P za%2KB0hYKc0_>WAN`OUxiQ5uLUGFb_t8VNo!?pb)Znv+P5}@TPUEf>qhOYK5NWdmQ zla2-*X41hRFgru{B{^&&twTTqnZQ}4Wz=Qja8;TbDOX%sdp2EIro6{M^6%nRqHJGP zI`%i`V5qkQV~1;T?P9k|K$eOr_e`Lm1`OnVli`!Zoqgqg8cAQSZ)3WxUT#d+FSd=b zjQ7)*8SiThL{sV8&+o_buTn__*t(?0(NH(OPV=F+lDr#3Tdp5}9%NGImO%D)eV;+5 z>zxJ47-SN*aM|?h6AEMkv1xgc?8G@t+#kicfqJwT#iA}TP=$w*;3{M6%cvEV3@62j zi9?f-E}G-Q6vR4GSy>Z90G7b(x`0bumcf1Lu+pcZoBPY>b?ZO{ZX6Vq;r1aeJ5Y=p`*|D! z?dHCsH*|fkrW^e{E~h%o#GR?$Q|T3zG!H}Shd@mOn;{R4Ad|K~0oh<>3VM0{WO(c@ zhSeQ(V$xRDni;FT?6)En`x#kCuNwZ<>(A6M&I`}Fs!Gdy_Lci-Bz?KQ z&0>zrcw1xX%T3GHV&%2_E~<63E`B?;2$9 ztG5*1eK9KD#^7nKt`tUQg0uUo=JJ{ zqcrSG8b*6^l!90j!_V3nZ`4G(p(W85d-FnZus8xo%VSlqpXfw$nu3_LIjIzi_8iq7 zcD0*MiMrN9Xeq}u#6m+085_=xNaY;#NB~v+#b|)YoH1@ z39);Jt8iza47U!JD4^Ziud7r^Is-(v`Z?W8nDxpz$+>B|(yr+;!(rV)>Zu@-wlPMS zsT{LLI<49a)qAO4#F7`ITv>Z|EMX?OWprvq3D{emL06WABi%(fJJN*vHxFtc!(~;m zCESvGX9^6{`>owu{T^%E81Ey?je(?ZV=7Z3u*ZS_0YE=!Xn4O|s4aGD_a|Bp{Q~EmXS2^d=%v&YAwnm1bK3D^pJSQpH`jX%(F04N{5#8Ago05YFG9R?0_@g5;2>Xkp zFkGF0V>JmlUYCTkt?4)?5bMZLjp!FUG8sM)*Y#SLwC5$7-V+`%N5M-9uhDL(8?9W^r?VMbbFr$ zwd=jb3bq2T>m7x-L6BXOP6>icIWvRQBTq8AMtd>FS_^QPu55pK5_*dhlp||M4n=b+ z-D_^V%K8_W^~m#@+~@SsdR#x>g=Y_jl{-;kmkKcr$+A*@4EOPy+;d~S?|#Nk&UicH z&)-D4i;~}E>b&H$?#hgpFDCssZ-Q*$dzL`^9?;=+)g<$LTvWgNn99izyXFwRjC0e40T6os28fk{7@a_hbljBR0Mgd zXC);sOdb-KcUJafMynTjR56@vNbp8`Mj-m~BNWKQkquYJE0CRONmC#@vnQ2MOU1c8 zX}BaXBgigu`GvN0T<*%oxIxmZcG=Ua7U0&1z{f;zY!m>G$#d@Ap^r zb^95Iq$1;OO!qaG0+s19ft0|@@NoCsB*82LjZR#`-0O>&d3F{Pk51#|mnZS!KEpv7 zgI^?L`cvxhBfaiWrXVx@KFJ|dJ@XQhOG4~Sy#}(GElVJKL$hCSDp~;9)YRKSrn@rT z0xx>Ajg~F8UN1z(g-O4m#@oHmzVg;)`PWhn$?{%Gd6tp|3{Owt{`tKaY|6%-+(=Z# z`l33TVIspv$i_m0-!&QWRq zBESyQjS1L}RH>$9IbM%)Ce5< zI|be@1rvfvhpcjq#^*UFf7UFAl1eej&oVX`ZesG8l($>_9e42X>L|tr+HkP70_|lv zXvj%LZDtZ9fJ7WDF83RY8-NL9p^XzkV2}_f}v}b_AM|15qC@Gw z&h}&w3L4C=bV+ZeB&gEy^buatqj;bgHwmv>gLFlQ%MGIYB9!hQt5Z{BQ0boqV5Sh$ z_2tnjB>|br4s1%T%Le(*$ zdN(EajS`SahKNFY+ZeUR+wgDl@5 z#>+?*gc%)~8o?quM9o))c_@&{J0E+qq8L&JqB_bQ_3>Wl%nDt21gSDXrCW^F$Z*se z$RwfkR8!hlKql>E0x_8?C)Ss*Kqftl0LM5hO#0FTczjow!Bb;Fw=WZ^_(+-uS%#jJV9`w zt4QfwXDLq6bqx|&l2g`BfOY1_p}R0ay{M!|Uhqrj_TcgX{t1pNN45YC?Via!RAAse zTkOGc^ z6sUlU47pD#pv^J5ctwED%$-+na~Id9fUAQ{#v_~Ey5z{-kOGw}#-C*> z+vxk4?rXfiEd0DM}Jr3dkh<(i-}+Rc@95%vh3?dZS-+ zV~c_8CZVIlOQyzP6NytZ)t4jnYAPUmFjA{P_F#w(OxzjwH28-$%y#n(lA9&Qt;{W02`iPMxm+Y<3*4 z9c z$peY*9>@&zMSXS>&J1+Y*tvq?$GCjB4iATGl#GF)Nmuao1Qk5fVi{iag zPE5*>;l7&QTV2NM-=(ka_f@I3E)!|ZC7QI+YzZ)34C~a3b|&Qox|i|l&M9=1W+6Ak zA4POnmC>=vfeFB}-GhV)u}j>@5Bc?T+>mB+{8 zSa%bqpI@eHy@-kD47d3^7&$>XOFT8QO8>#`y35<)yvY&v36kEdVu%J_=-w34v%fgqG4v zS>ora-bblIOoB|Fn-qvi=DviL;>P67-CfxsI81;IR>Xe=WTzC&#FeG1hJJyWv?+-T z6Oc*Th2(1K39819Oh9&Tn82Z%(jlgUNv02vH!2y!Ob3|hx`!iNPMGNs6G=*jfJ;J4 z&6Q~|dvLS@_YO1sR3MY~I<41KK&Gc^7(W#tA+Z8kUjZ)hw_GI91Z1Z=^KrZ_k1D|7 z`V4dxL@V_a#iFYy2Hj=x=&eo0q4r$dzp@Xno*bw9(o!xK8r3zu>)wit*S||&-EVPy z6=Yg@R>0tT0obIpOG!gJ!#))rKf8q4M;Fmkm4o7_P*lalpwKS_IUYgEfhF1bAk97y znfAd*vG7OyP9MZ?_eJbhZ^UgAp!p+qrzaw|J0qHIEy2MX8QuXXj*i4ge+%YbU19mX z1bLiGo=cUwFge9~H#df<*^`)@;UBfM15O=e{cKtS*`j&_WZJMG-xbIfJJ#E_*QI*D zB;8{2JYL;9f-zRgj?ySJr3ay&j;uK;kfCFc8b7Qq!dE?(BtupU#Nt92jn-o+q2;NDRGeu_$El_i1v5Rg)Z51t#3Xmi1Z2tu z(UsjXxH4l$W(qPLVmioV*`pIpN;=FQjdE&mWx6vHM<(EU#L)E1BjpNU4~7V|;d0zR zT8g`ei*aYLNCVn|Qpod~H})Im4bNzbBNLFxa(OUaKz51Y<|T%j=X#5Arl*K1!ANT! z`Wa4&dKrRu7e%ADEDqg-|GuUS9N*6ncDxT$G8zU$%=rd&$tPo_ecOH2WxRe-Nz$q0 zq|NW60ctUbiHsp8(#x}QW!!&i`aB_Wfe^dMIxtSh#PIL=bquytB0I&ZtQ$(mTKr% zjr=B#OtR-CXG?OrR9=@f#7p))A!gi0W(qQ6*Yz%t=`a&VCIAzd3Dl(VU%4}aOgSC%RL2BCCXP&N+bf+1*?503#`&8r?k~lKeopt5<77tx25QqV zSeK5ybYh(ak?1LoK~H%+4m30LWC$)H=EO4z{preBW|Sin_)LEFo|?*d{i6DYAQKsb zOj3zddFHX?1=QlgrWi_23s_!XBVcY}>_8iGLj6$~9E{2kx-s`qWZMLw&?yY5R)mfTL|vq(a%1|)7TuY_>cQ|s29U`kNyn<=FgyOdjM1 z7_zB`bgd24xCz0y3>cS_MP&e){#hTmQ6MF09+;DPmf6XZ>a(_uR&J#%&8Jt03wzDu zOkKgutE-rLCgI*aTsYc`+{hqg5jaKubYl)a$ae@rt__!2`Xk-OAE`EeNVXJL=0lkI z(wX@ZX5Pw)C2S8w*jjf4u5v{926sek_CUZo2L!HnMCeXuMA^F`(Z>^e>xwY-C7tSP zhOxX((&(?kN}N#6OhQfI2-S#*S9D|wWJ@pTUC{RcWFpi3^nxsf&GP3-C?Mmx z;l)YZIn%+4lc5|zTXq=sq=u*@*XC#fE5c8KtlZySO$B1ods!dpr`~>48{wfsN^xUd z86oJ;i@^TE2n-O4hs&es#$qv2lkf(}B(&7q$fVa&8vCWU&lF_hY^1SY2bn6z3*OM#U!r1W{?<)+eI+2fPV+C1HuxHDbi%$|%Ag5t&mWJWME2AQBY94OP#KGzmH7vHgMy^lZWKNfM zxHSjI_Lk!ESUc|BIKWD(l^d0KO1-U&=;dIsb#F-Am{B=2c3oPw{0YuW+Y`&o+&NW# zWUxoo8wrMul9>8}f0hjEFh@u9{4&lQ?ZR+h6RwOLM1E8#QoKBo?;nDEuOMXDcoSlQ z$h9EIECP{aPWQFT1@UGcNU`!$jr;hgwu%yuW?oiUFVA6bMf?oc~{DoM6i733w{eK~PVwUJ4k17vKy228$=#O%y2!&5nn)ama) zKlsLey#T#Uix$3jXt85VO~}&(nhVpnn+F+h_~iW~ECdzkqI>F~lM**3jrSeNVWx#|0Gu9%zgVRKrzEn^{?avjSOTj2HGK`k^;F90!YHaIiQ^jdHO7vN#;C zOPF_KdK;MzGTo6$+n5eBX(JPmi6hgq@9z;_UmmL=q@;IJYwS05Tsov=ejZdtl4VcE zTJZE#D;|yQQIcg!$GM(*db~kN3pJ}$8=1gNLQ7o|T1uOpJism^aj14OIxh8qyCDrj z!piFkW|g?gYb-FkI#`M8Lp8WTV2&TH#hLvT7;eo~uIx~iyhctNtF=noa+wH1)ER!sJ5Wd+Nfots%wAKlcbYLM2DFt4BEA5mN$hbaWJ?A&t zB6x=_BCKps8WW0Fw|E_%$>UDq5cwN$4%4%z>BtDOIbOS&I$pCF)>CuV$xl^%{XXb> z1TulxUmj$-7Au5rlkt86tod-#Fk-^IE0aXQCnLCbz5_#TS!gey6Uz!gTUs#oBm|>P zdMX)8)&zQ>+{YEAUe2ft^rSoR#f=$*Y%$lRLrI_|z?z2? zC7+G;@MNpf{5FJ`-d3hd%QMqJHt)>%`Tj877{l8e1LC+e=_wfVnf=`aG+`zKISR-` z*XSZ|@x0|N?c>AsIDfcSy~yRDdLO2|c`04NY_E)xQ5KJp9)j>x7mjn^>%3Q5;xfyG zJP#`XGTdv^a_~M<&Q8IM$1nkzNK3rc)(OPa<3ZEobUqB>UR~gMTm=|P$|FRF+p5*$ zMa9wKD2H5kIKqFGJ^WYOB47={w#o{D8*C77P5Sop;4*{;^Pi{A;MJW0 zoM%NmP@jY@hJ!7s0ccMRLU&38TBH3@8{~;HPiK^RI4M`w80oJhVWsp~)`knj{L!9F z2bU74hU$?q$9i)D(VgX|fvh@4f$T(m;ylRC%CnXPnY51?J2Ktvk&O!Z)S zUs(bMTXMKv8%`dqz`0{}c>d)e9T5MVB#T`j^9{>|v5Y|`5^%ktx$`PnS~)R!8#*C2 zK^Hdlk}eDk<6hmujj@9`&{Tn%)OeIeN1-4nM74*B3(IiuM24LgvTPV$Is_okHUJss zKFGB2MVh%c63yHRFc(Dcp!?e9z%bKI^XNup}#xJA6=OYGjjrPq%!KAAUofh z@rEN4kV!~s3^Lu3sYF$AWAhMuvzJmNKr)7vG00^8+37v=>lFM9AX5;do}AG1jCx9_ z=>U`VGSy~As7Ye3yr|@CX9kWpC1a#1iSUUhe6(@aq+>%Q^U^jrQk%%_QZXhE$jf+Y zN2+l9WD~wT*MVy%TX6M6D^BmL#9%{)3N4RR%lQ83*jJj20fJ3>FeO3u_`YJCK3s{L z7uqrTSlk6cWb%lTF8%&5w$503TboM5Q6jKpxlCn$1vi3@PHc994s4n*o23hzyn@N6 zmvC;V8y)4jD2NDA&qU_=hakn#18H`iDD@6UmYp{;tv!%$?~4KlKV(^Xsqiwxk`8RA z3!&wLn4OMDvh+l;R}>n;Gf@|sjxwJF6u3pv$ps;1hX+E}J1L0CG;pP@0$9Xa7euac zMaT+Az zNRTCc1!QXEi|)Mn{4oKUNFP>5K&IT0gp&d@P6cE-ymSe$1Xdz_-WX>3Ivr+u8`+~% zbY+y<&In}U${rmPfYm~V1d?_z2^UYbq++BYkpQC_1Z0UgTC)Hz>DUk*t4dH~unlp3 zm@qruo{4jknn5VuztD;6r`oAboIO;B!_7JBt?h@(Q*p2)8T(6;6xjL*vO`UoINX_y zle`w^Mr!cvu8gfkSM-+v89_AB=Tt8616n|#6JPF&<4;5hDFJA$DD^{PFr zJSi3#e*Vby3r3m~Lq=;)B%8aT!ZQ+OZehr^^+lnbFCpfEOiKwbeUY-;o!fXImD?7$ zg`hGZ0Tur7NMq<3vQffDD-~j9*@ddKjPUh@*jl=?bxw$&!q+$>e3dgIR=6N^nLU@; zA!wZ$LU&ms*4YVX2YTpS&*9}${PLVG%X3S%>-MNdT4wG(nhufGEE9(Ur=uc zne+<%xggUaWGv%?Xu8f+#``NbCIyofVCuzjJiO75Q>;`6S;^XRL(rZXg1#I=EIk6v zk-jMNazv@818M@?(H!BAwixNf^oP7yS9>&x5Tkn&h_xrnSY&?Klj4o$L^pJ#dt;z9 zavo$0jr|(Pv^KI-Tx`>xv(!UN zlK|@Z8Bv>IUYqJ5)0gQmlldoS7GS5GnNfK8aHxS0tx_Y=$}rpKJF;+QPr3rxSTmhv zhm8K3r5u+68J*ZzQyMNXw3J7a^f#8DY{|f}<}?g*zY|^AxI{4D=J(z?--EjsFCZJsld~l`xJOoIWj5_rsZO>b#I6e z(|awoWinkTJL=J>S3I7yht1x=%+qmPIN`Ad15x5bxlMWCwR7SU5A3 z^g+UQM-5<(fyl7%KpvN66I!|UK7^C6a$|*V;VAWrMyXE>a-4%z`hBWB4Ei??+y7~ z3C~V75>(>8S`^e|`t%fC7N;-IwJ9lp5nM0MwrgM;qeGKWa-<0ljxkK-^wDTD?he$b zvB$={3l*I7mjJ8R&=FKJF8`@L0;+VJ;O{xZ5c#q^Z>e5xqK%LtIb@R6f4;8}X9(*v zdkb-Kph8{$`xkpuXeqDRJJC~wqm3CDVu-oFG#2}cqSZS;`--D6SeJ_7_FRnZEyaoc zV%)pb0}wFNFHdMrO2#H*nbI7TmRF{`acyXu(`sZ0^-SdS7$znq|4VxG&fqndi6-aH zU`ocPlg4o#Qw@PbCo}be5SzS(CpX4$w4)wPdFd#Rk4ABL7z+HuknI|P92bA2Sh*q5 z+!-kru1MVNgltDNhZgW@dW5Fw}>Bt-qu-pnhpIbA`bb=3; z`);;DfVnmH6z2jjZ}NH_<8^7FV)63zTK;}Ll3Ju*f6Mxx9%QBf)1|Lh-%Cls)#~FofX8Y0-VqkEe-lUXim_^7;8%p zQUH^&#@f;eu|zL4#L~4T3dlUsp60FE#|{>UzZGQSY81>`Qq)MWYE)Pm1(q ziB!Bx7QC<;O5aP+#RY@Id1od>eVP2vizDMkL(g5 zedTBkZj3eK-i2=5J>P}9XFGA4A@$MbbiynR1C{aUp-b*BjKIDUUPF0nc}G6Z?ytaU z85`|v7oOc2obS1m@}!4{y4#ZbKlxhnz!v_{B#~Agtky@XP!CyC6NKMu?kkeVjAo?A zPql~L;Pf_bpFe`O(rg8=%9uE0`vfA**$esZLCS$;+WM$)QUE3(OERM~v+<;>4@Wj# zSh}?ra-0Ixqe-PcQOKfGi=u1uTDco;%eGTHIB%u^%+6C9o z%;C4j0dcz+x>^O%(Rm?sgQR1aA#jZ)!Z$d=pAhr?$QB_h+~Kp#0Upb(;jzvf!B%!? z%uglEq_?*flP|T=FXoKu?02od`OxxfCC5L; zUk*2DFDecLNI`QJ( z5d|{IuGc$sloR897sa`5DBjM$FN*+unz^2AA`TRVd z-KV2_e2M3H6bBnCP#i@E78InOmrQr@LZ%~S@2%1*lFeNd#6&Wmu**>at;8dg&Yt^t zgdyKGSmljL&R8PD&1AwaQAWEk_f#WX_^%^~*4n{yr4?L0H;40QW^f?H>ya+}D)K*~VjOcC7h}r6lz*W}p{@4OupAcZ5SSgU%eYOqO%h$tW=MMDM zrx9e`{C&y1Cgzx&`B>H0?}PrQZ0vtSMj)GSGcf^~gcm9&NTx52+Tlt<2kY^*VPKCBdosoqL`L|8&hUNWLTr>I72CCEgQcq;i@ zD#SE|mrqBl@%)7JCQ?RjOy=KkXNx$qd5Fm}nWyx2F#(ylD1n%~fk{TT5RmDkzUqmt zYS2WUvz+f8f>tHV4p*v7|J#Ro?nf$=1Y&B~Axh?NF;u?E?d}}scbsj(mlx@*t{q@# z*^L{=n=#szhmp2y3^%1Stc+7`S^j7al*M3xFgwzkg(D1Sua36xJ|4xZC&QR{HLC8l z>ck`!nxr#4DYSQ(XMKSk<}Pz zu0Ul{6pF%vQ5YD6OgAs2+PWgy(pf3pnm{swm`ETNyWLKyDJ)sROk7*+PDl8z+6A}I zHmkO*kS(@|+3l{z9gDZnlw=c#I17J-ZSzFQv1d|n<{x+89jhw9Pv_{0J(baWPf*aDm7Tj9KZ2b=(AL7Bd{eSvdB z>4aGZW@pSXJ-0}G{*JT+GD`gu6JqnBg#wv0@-v*6mGuHS>h(#?J~@V$cMjs(v1$x9 zCZeMt2>r#8sy#*;?Q25aQ0i^ZkiZ@_0fbYeH}+*m(XGX+WY^C0K-DwZn&iiDl5UI; zYlw11Q;aK`W8LW7+|ixxODG26U_mI3mJwv-Q5dO;#i@p5)g~sA-b!&}7xri{lLy6B zB5Z%L0+~FFEsrE=38|9HB`*poBVbCEqys=69g_42*+x%~(A&!dV$V-&?PUsZbY;2( zZ1bNDV0%QcJd|_}{h3R7+mZ~NxL-!J&@%PKEs7-k6F2uBatrd^F`Jpe`dC)k)E)h>1W|Oce6`{88*5j3O_B%)tXWj^4;~ z@J5!6v|G6%g+NQ#ZI2{#Mj; zW_!4NwiTW$cB%F;pVbx!-t2^+P0kE4?di@O5W3Zap(X*i+Fpg0Zl9aM>Vpli`)~ui zzc8meb3^zRX*1hRF^pVer8%=@R&b^}+x44G*#6t~uwnRWyJk5eJwC;QYY}v!mb^C7 zPPRhT+3#B4Bar=d9#Q%_>FptlflQv2Q{$M+b8=G939_k&M_FllaejXxx{E{5TO6h; zOJ7ceYRs<)bV7-j9o?8C8p1r38#|B}jeU6$T53g#gqVJ+y{s-`Kt z_ZO)24C&F-lU7x4=7_YL)hURHJCpfGCpGDzrc6cR%1l8fqhSchq_))=0<*!%Mp>09nT5ANaHz&Nd!1bdIaQkE{e7>-O`{y>;`Kzti z^7D<@@!L&sTDK9qm;D!vk9hHVIbeF~3)a^qkZF1YWPkaG#=lN_ce$SXGoSxs0NMO{ zIy1aJj#qaN;5IAx@s4zK<_BUgAtP-t;;?EX+)x?hOpw_yytGGav@d$o!>~6i9Nif~ zXiN5G=;)26I1g^?ih6>qHpm|JA%t1Dqk`F zdF>megG`*5z)Y89`Ag_|x-|u7+tM&vABW=&@i^I#fKyHK3b_=9r1F}$Oon_~XeT3N z$g`L#Vb&l?)sV1Lpr*MrX-}&m%rre7<1&F79hszXJT!nz$uNwMJoGKPeXs~O`w7~; zc?^H0ca@FEXUa!xlTR`U|CjfD75!N9;YeWY_utzSSkUQKyW3CD`yDO^W(qAg(DuUx6Ta7C68E>hwvhmIgT10@PT0wno90jPZUrH)jk^DPND+Z4y&M#tGm z;5No#v@Tj{tU;D1s^#aJlDU1lI+lc=cZSLdGeU^p`IJuVDZ|U>H}>HH9omU~h3X;x z!;Psp(UyaeM!MLpLR{Kcj&lri4>lw!*j+u*h*Lb)jf-t~Et&rEAUR!_f|(&L=lR29 zcyi|`9$p*7wUgaA+F6F4>U4CJB%(DthW9=ejWHpp4DmxnkUwfdLQoSNjtbuplzIgt z+tvfAyB!HIZxq^kB4d{Wvd!tt%$$+F(;mqLmw-&bB_K=OX^W^$X6my5tKJ$raBSAw>d%D)SN!C!sZ`s!q%Ve!0un0Vb_N%vG!O0J5C>T<+ZY7U0p*h zflSkTfJ`jDv|R|uWPrD+=@SZMl2N@loDAV2!$Ez1vGv+E3(}#cw~vVw#Bf2mvFXQ0 z@OZovW2}&e2$n80Lz$C=F%;vesxXhDd`-LPJ#!VN~(tF;ix3jRw|f1B*;Vpw1*7!jN9S_V)qV}C~#@;O2>sZ z!fQ_oj@L$Gs3Hu<%ENG~E*2;2V^tc-rOqtn9_6>5-;>7Qn1s>FC>*bdQ7}_!CepFN z&{z!)$&mQ*xi&mzc=__y0ZiOGjB^Z?Pcf{PN5`bC>||>;LsCfuZo5)AK2$BDi? zTpF%sm{f^r8#*^+375FRB<$7P)$%J|F^xPF~0-$Z{-PkR_p{xeM|bCT5#CAdAq- zGIvmpOyCv2!&1{W3&d?TXLxC)mKVABBiq4Cfh^PBSM^#7Y!WTJ5VO-&NfKd$*4Yqj zmdce$dzsUx;>Nbab(!YITs|e#2r-90ZBrn#{oO{`{cbC4f6Wl|!`(3dE3Lx>7O@a*U!yi_RHPa^}!0P{l)(eXAijmGxn?>Qg0Wj)8B#qrvTa8 z)@$3m8)WjxiF&yB@m7HwH@i{Z07tY#UzO+>fa*k7Ar*uE0#f$Ai+q&yaF_Z;1lgt)q1~&ro`- zzW^uYWyRe0#;F#i`{UiXbD;w-zdX$HFpj(9y*NEst%l65$p}DWMhJ!)is-_k>A<{s zPovPA8qYr_KNPq-qs+?_rJi0WcJ)AwcOZ%#JW*)pjvPxTWbJZ94xLx7g%d$$N08Yf z)6AA2vwZ_(0-Zf{RVwgo$XMmP5Jo!I%SWmxso|2Iw_aAMuF#q8`N_4zx}52CUE&jp$2ZOe7( zy;a7`wCxQbFH(VOXm{RJUtNpwYZgbhFY<8UG2To8eCwJEsT z$}qT1PpY4k6}ZGM)vwJ#Z#-aX%erv&2M(-Z2s%r@SGgDqKTD~v)#tQWd6 zV{xb`4Q=t^s15Q#M_dH|u%eLXWRDVe7nHiXqQcD+6?A3Ac5X_!7Iae#Aq8MLmULt0 zHptj*g|yw)^B_yuZmA?7i`l#z(F`wRHk%`#ZcJQT@JfPg-EIV}+=<||W(Zkl4!@PV z;J<<)`ZAMS;xu z_cjEX8LWS^1$JDv{pTyN?q5E^_Ft~Yj$dxUmVeob9Y5Vkx3&e_e(@)K@#Fs|{{R?P z&MblKP0fSs?dcca6l9_|q4egmuamaD1~N4;9zWyxan-1NvOPTBt&`<)iBi(X6g_#fb8+*H{^D3IZDC{9$z(3OSokH8PD3C?Iu;vYe@y#iQGgdJV3t4cwU zYo^)^c|8XBr*XO}7MB`Ra897zoTScIIY`MhqYHa^V=rbH9^Sv&gKMXnarHReb6XaM zWJqwjx*Lb8)C2Ah39B1p4LCbkqIx-HI3RgS<0f6%gYg~(v`5$W;nukhG~@?kZ%s1x zmM5YsCknNaPLq{@_UKULJMmA*-wVBoaSSJ&Q0(l8N_P)bxp|<%#RDbwt|+y0p%b%3 z#!hSH!m=&IiCH6kmnBknSs{6sjcVvO1zF4nO<8nfiCiDOem7z_TOxezZbWXdLfBe! z1vN>T5SV#=wjEx}cEFeO9-r?Zs5Zgo_Z#5&@m4r}vW?5k6vU(vU#31QtO!DTcz@;u z*FW08>5seN@bOMq(XH+NV1okL+J9Pwtv@E*{&gF+{>yr7`Pqk9{^S1zC-&JYN4Atl zW~{$5$c!KQHip&wdP9<<{@M5#BK6|k+4GoWxN)8T@~1j;6vz(b1TjQpNEpsa7%XFr z3BWWrRv+kswn#4pveqbf)%MjGPUl9DwS+pNjUa0aaYl21J!(A76v*lWt7jFHm-Kk)pTUwVrvS<+f#6*GYywJr0qx77YB>NaH&fkU&_N+ zQ#y{<9nE{_jeJ|)e@_ooI?+|S zxTD;GAhU5o9vxWLPD{EnE4nc|x-lCCvDBS5NRqH}yEWn&Mka8YxYYvjo6QinaTj7Y z>{J~CahuE$#?Ufy?M?->%6;2HsxIXnn9w@78^Vtn7bB$o*zLwGmFgGl$cM7I6O4F4+EY8_a&U5xYLvh;6^zh)q9Pk8MBM zitRrYXSNobfBHLo@ss}*C-ytAUfN@NRvP-38v8Zy@Y^Gp>}jw4rrjWstT#cJ@RmT zNst*T!mQQXqU23c^7^}r?RmJ}SBlZHSPbR_qCdqQ`_tSpl<$W#HIcZ{nL>!=;y!<$ zh$n(uWBRv@^X&?+2iZ|cyy&7!-VY7#w@gFhO6=8dJ-crkdcHOYleRIwrCCv zQp((Ij!I`|l-Ss!+Sv_dc8(~ubwIwk6|#3&BAf8aqytOc!H{yh6;gKCDv(KASlm`= z=(qX`$db2OBbM-rUb_o13@xM9aM^ZSL`iu0#SVn6wxBa3$OtZvPqxDQ^PO-fz?}cI z39cV+A-7D$*etZWEyLanbor!ER)oiV-)KRi^Uen-3~S|cRQ z!WOM`WX%B#F+D7m>OASjd@RuzXpP2T8#IJiE09TJza+s*uj8>=LZC82rBm$7_gC#@ z(%>&`T^gV=RsNM^$g7+!9bSanrLGK|YfHhIW`av3Ib}5rQ5lvFGrSwA45dPFq9&Zq zDF$a-3Aa528=aYQRQ)*`%mxWE>CGg_BuQ2W*|YOacyzX&AQMN%^~2I*S)@YC8w@S4 zb!6gJPcAMr(P39wr%loGZuyrcsYh{demfta=15x-#ccGo2Vi&(9Y?X7`&7 zaQI*oT>h{_0ZkhEcl>%Kw*Pu9w*7ho*8X@k!9{2Gv#r?rlMUGL&&#p?r@zATfBj!E zdcXPl#6xemdxU22! z0xZ!KWQRsSLd(+vEk4$0@U=p{za{sf8w<8ZeXtewFoaSdGvt0rQmepge?fq9Wm-s? zrou{rm;h(ITf$2%V_q7;&+bXa>6S!DF4kxbLsL4s;mUB8$}n6Os@##ZSslvrro3>Z z$Pc4cp*Yv|uQyGhFv@VIiH5!A( z5h?^d!_OBRl5wRu2{${^aJM%b5BBHc;ei|;Cx;-*$0K<@lkQ3$S$cVAzv`Iz@>-wP z8+p7DXZwqAVP6T)vkf!14ym@Zn`fF7$j%Iush&&e<-9aPS9zJC<&|#SzSN;y-SgWA z@#4lI9Bs`-PhkuOij#4?GMCQT2NmvgUk-HQE^g=!jX(i`B@ipOcR+=$Jqpb%ICVsk zl`ZmiTO)_c*k*~uO=d{kXrbJexH55L0xwbgW(&k^Fr)k0h3It}#B`8J8b^+WE59#L zO;dL`B6YVbU7agpHrpd~oehH5SgX*|dzl&hR#?LGGYKc@)(9}~FXXcs9Dl!s@Y<+= zX7;m{3^CWj{!g2+;}rok^PRW zAI_MbTeIZI=Jl0fe7+!9%rHBd$@zVBM56}a5K08uLP9KI^agm|PddPK3B1%OpM;yN zm$${pE4*f=`Mr~)05$Vy5D(9{;cQnf`m*KqZuSJ29a z!L2cbpo?;4cW5KCV6DiKBn@=n&MU3!ofm+ z)yOaTW9OSwR73sM-V8!3LFp2~BVnOzd!&qEoP?$25g4nDQ~6kux^T8x0H_VhD7k3o zdF;{BU>wQ!!C-+8hDri(wka0l?UJq`&L|0&d(!Fl@)V$?S5ijLcyX#8FV4ugWp#LR zn&IY2hLxjb3S?gnmEz7|A)R3^ZgW3@t%R)?n;EjU(CJYZ=_t?Aft{*}Q|EQMHc_>o ziS*xhK~hDy-DNt;TLjoWf>9(PrMR(&{EkP5i}0A|B+p>pljPjXU8-Z|)xAO7l7Sab zwPKu*x_Gb@56`sW<+Xl1yV8dT1lD!BFL7iNR$d=#W~f<#@e?(;bGaQ4ZuH>ctv)=z zcL)!!_TlPi6NcOJalEwvN6Rx&>g9-BI}7AnTB=a8$;(?oti;X^1y)uJEA5eMZjK@w z8`Wl(Yi5b$P207$GKQ6jbXzG~%?TrOByTfE;+EZr-$ZRB%nVA{M2E&OGuO(Qq2xA1 ztl5g#jb=#S?SQaV@_7e>S2MiaU`|;gc%7w!nC}-1H|1H&6}IqNW)1Jv7 zSB&hnS8Zf7b1PX#mq4cJ4UkC+h7PiH&i5~X%m`v{fb45vW(qD-$zv$`3sxnQUtUD2 zAVwz$(c}nT-`$HF$12s(%-!ies^MPJC7OfnQA;-_AXD(7WO<#xHA7A-)eG4}knLeu zDG<{^ChcMMJ`z%ztB|rO$VR!b+CU4`1(~BY&JhRm{FNh<#L?4Dl5!EPa<3$HK>&2I zHBB|tODK4uJwb(o$Eri=7#MmIMzWo>OGzjbdo)y{Kz4`lynm`eHTdJj2{rJgII`;}8*%km zEn!xUy9Ad&OcG~b+&qBWXWP_p+43~Nt+TDlkzJ49C;RI%7N{Th(w;52ChPDYm_-Ss4%n8&K70PPRO&eLE4U8 zD!de!rEb}U^lfHzWjh&W?m)suabKJgO5)ZMHd!i=3EVQx>{Z)Y*s9ISu_bS}LFme@ z2>fC*f>v#%^V$lZ9XQjUgZ(9; zXixS~fD&Le1lXX~hv4#+(9#z50d^|6RY0a1_9LCp73+%jC?~Xr+7V)OWdbc}52Gt< z@U>8%TSBCr%?ee1yQ!UMj$BnZcf z12Iw_jMH^dbWlmS(VK}YbYs{0GI4WXj&fzvkS`B*OUA#z?Agg0JRhr7(?=tcLnbfY zWoSvabW7T>7{1B&4-S_SKt&2l*Sj)stu0jnP2Aa4Iz-Vp9h(5`MpriO^yTAje;ytU zFeDr(CbT%E#D&c}F>#25roiYx*RYO!CD9WLFsyOC$dSx-S9Q z%yI@ZFq2JFQ%Ry!{mdbxP7`4R}VMhXiXN9 z?6x7-iEhl%j^MIHdr$zCSj+vp=E5>l(uy@Qa0~I;^yrH z);2;+q=8JNyD|wclNpX?TR9+n%_byqK53h^a$^Frz?It+$oyCCP$?MV$O2c}!Q~^# zEwh5#Czf#d{Z2I`kJHDyVE2b@T2d@SNog0e`Cy%Tc--oPO)&fQ25kS?TII&p|7az) z{d@z=ezlDtTczozAL8?W)*AZ-WRo*mQ_%N8-$Rfs{|d;|7*T&F$V>rdDm|=};d;c4 z3CN^_VIE|!hVkY3CX6sN>Mig?hm02%MTbQI)r<4;6`0XY`SG(3F#<~<)*0uDj%eq3 zkTnHyoxy=M2WT*p&jPZh5F1qco1rFPH}=FjVtd>Tw>)p;BU4 zc!@eu7Koz^4Tp>TRhW1<&j;Pf&S;GxV8aQ^I6L(SlMKqJ#>%IgJHgORp2L*Je}T$r ze$RnScO0doyUgDz5W6ZpmkeD6WHU=_Xx7v{kh6zi8H&^ML>4aarNZl9>H~gFJ0GuLW}Tva<~kS2MJ7p81;YveK;sU z(*UOH!4Y{9fpFz{+>x}9@lG|&5>H5hZ0tZ0t_;`U#weW@L3a0at9rP6;_jfz8Iut+ zq@iDQ_d+{G7k0fHPwp`Myw$Bh_TupoOg%Y<=Qj`0_4VMw-fC1ud#ZOYRC&9iCD0f9 z6Jk+hYl(74d*#wZWe!@HDdDGpEN8a`o!HI=H^xviW%CXVW^`l;8+TH>709HWOnNIL z8BQi{q4TqKM(m~?sz*~4x^fEwmu*DA@-6uPv-h82S+3o>CfHrIcU2!q+NSEoLhZII z)g?u*DoocXhxBvYhn~7h*>yt{8kl}f1cp^b2iwKe*!v_gbW8?VnxF5Gq zRA96&kxIs2fvh2lHd3i7SJZ`gDVRxxe$6LaDIjYi$OK|dQC(ipBB55KK}{ zO&ku!z=2(8joXSA!b{XvNBU0m9ST-a8RLp<|23%F=YvtgQC35xuIz<0cz0%Dx>#&w z1THu4Q&TC_WQz9v3TkRnMNhU$;>)-lX<>RyyDhfvDS`Hk@o2P2sUwL8$7J*l0mh?1 z@8NLaXH|BGHdBCht20ym+JPDnv@|RdvHPeGHDk@jmbd9 z<8=yTch9#dkclFDbdw;v(Sb*IdvO0&H{L!S1EnWk-k_43YDL%K1YRHl)J|EgQ6VVX zy$xv_)*@%?CggdzB9~B0TkoLMnSd9B89=@h_NZPQA7sNDVctj#~ za~P7hgdu)o5K^~BV6WqDrN*S!QY!mpCYdDqH)}6blQ1^vt;Tw-Ra9lGU_WOWHfXPg z3l*6i)tKG)8jx9j`~Spbmqw9&t?d6Y{tC!6tCj@WPo4j6kbPNxA@OUNiKYDf{Ry&< zA3mwEcjHQpy}Z?d>r@(JH3_t3{%B6{QR+!-p~f1ztAf_bfGrAcYGsnox5oMsWS<}w zDTT09VxfFap8o{1dMdQ0Fg`D37ksQdV1vq$HO6^Rk@>0B#fkF0pCKj_A_QU*QvY>^ z_fMBb;6y<%hBJ4gGsy$>5ze%=>(QC)L%SG;37Ifk5TOca2McI74^y$pVgN0xlyiu( zyWWz4TWwTHE$PbkNn-s@FX1BfU{V;{sTs3#gYXfM-4lg0RD?&zituEVii|e%IidDQ z>dZcYOq7@aPmTh!$0NmfHcsUx$9>eY9Ef{OeMrDE@ ziUNJqMl%K5-BG-gvBMMDTb+^bwFQMf9>{kWMdqR`rhqJ+YD_?u;YfSQW6Bx_70Gsv zjCDv}tx;tOt2QEj)p|rMT}^w**YNcv+x?O5?2gPWK7^(R_HXn;l7lOfojeh5?~cI5 zPKaFXj`XcTY9_yow2s}d2hltxxCB#``KYGxtww89)3~TH4}(>3)mf_Q$~IGxZCD^6 zTLFi;%i*kJhpmR|;W%d%9A?|9f>`TsK7s6=8-Dsp&fBlaeog!&e~AC@flT5{b*3rn z_<2QCK=#u+UVUGU;HRhkcz&%J*GBR&Mpe|6xkuT)%AieZwNb30*vsOb8&s>2SVl?Y zH%54%Jz)o7=8a~8tTB@IF?_R%y5LQyp@ppH_h=^Yn)zA*TlpU6&mgOhaYI+eP6e{@ zvPi13C`?sF(Hd%26D5Cjwl*H;Yh!VuBn%_jyU~^GNejCP4SQYC66=bt6kqfo^utJg zsDff2)uhc!D~-fR*>p0k)hLe21S7luG zRJ8(`w3-RXB-wv)v`Q0W6{-{9-i1~?xYnr@nW(X65Bu@tVIPl!8ddge8jmja@cSIm z6v?K9s*z0xJvJcM*98>;zBuf=1$nX%K%gC>LKB;ryJ<7BH*Us$2WRY~`r5ZB zVBcCtqzcSdJ0eM96|Lr~4GLm$E1eLvY>kSTm1|KO7^W=deit`nxOg(Wad7iCsz5)r zac|5Tcg>X7m9C7f2wCZlpjGY&klM19p4e@(MYSr)%B7THNL|@BGY7cq+p0?cP1-AI zC0Ahm{FQK+W20_+n!3Pg9u?ZG!7U^ zYx(g#LH3S6@68B4Jnh4~``vhcr3u%D^Dtf+gHD2>G1`Ob%LP>gSzX{3T0;+%?k0c& zHlaRD763LATyAKK_eFDzJ6fWpOoQr+5K~9m#~F~dM!2JOFKwl)Rt7qwI+Witg0G8p zNB4dW$V8D%RYqgFI$Etzs=U<^!lyAo6E(D*MIji^58^Ql$BQB`b|?r#nf@50f*j7F zMJ3FR<%M84pRXg#Wa`8TT4gz2Y)ZrBrgYru$i^L+fYE*ccYCC?foe+fVV__o5R(Ge z8y!?--F*D0!=#Ge7|JlE)WRXwRwGBwi3m z63+=Ki5Y;++@HCvUN_FK;qm41O5EXN_m5YrWdHs1t$6=n1dj=;Vg7ysvddJEwgI|N#+hM(CA1T3_tDwCB%E^s$l2dDYVux{Q`c$sa)y16Sg)^e5}tiSzVaJ*Y`WbR)<_KWxe zWIw5$i@(T`5oA&Zp;XiR<9PdFN)^OP%+Ka;m>}^G)Ur}FcXU@>P)Pns4)Rq(_Rh4>cXhh zLY>hXCHb@seBF99hHgS#kTY%NW;BIwQBfW2jIw}r3T935?l?+lPL%9bicCNzg{tQo z5^=3PjZoQ-Yi;`&DY#0gU2ICk1*$a_k~gF3I$aTiQ?lY&5{2nv+Ed1HX=|#9$AyMu z)mJGYElXFA&{h&sQXU}%tYZ6~2zUr3soT0Ema(V`2Ry#j zg}YaeXp;R;hw$pzD4yK!$4{?lFCUGlZRpPQmEuxwC64ANqB}bV^$Gq+*}Mt|Jsqji zx1xNv7jj*lk+qR<^Ki#OM}lp`MjkgHW#t-Vu5-rzwGK#MqXC(KEpde-;-y|}xjkZ+ ztwrn#2L-YyTRW8Q^h4%mcf`|%hAmx%FdI7svarQ#;b*=aVauGL>6 z4*R*ZmIT>UC#@yCd7g^+_zE&j{I`OP5c~IlZ05ekQZn97;{BU31+nM%JMjG05xl$I zffpAWaJDTCLsUCQQhgL?sspH=_J|^*dJ5i3g|&%~xhQ2NxiGPk63v8H4dGQCOn8M; z#RWK`YR@{<2a7FTPc`R)M#8KiY$K|IHlQMC9csfhAnQG_TQyqGfb2w7G|tv1;3@$o zAiLh4N_8Yj`3wcO%dHxyU2Wy2AckV$Sz1F=j6u^Es_S%lb7$!k5MB6~4Rb;NiotBw6XgG`_%Ij%23rV{g` zRAvOylL^|*iDCt^R|2eGK}+JzRM{^8Hv=*Wv6k|+qU>bEkSH?Akv+TCjhDCj@%r`v z&JPt6IEQhe|1d5M7UIr{dNt?&;khHK^y2z-1FlZi;nH}es_=h)vsbNpKDp7UYRK;2 z>cq3h19Q z3zfSFv&|cDc*`c_ZY0#!JK=!CI;7dHRRBv{V~2fqs|mK%gxFdn*sevK0Bq?RL=#qt zRB5qfb1{-4@`D=@Z9wJ3bJ3szXD`p{{&=WE&p3V_Uk;^&$%;!m{`gw#spqI z>c!(5&3Jab1s`tHW}KSfWVJy8CO$@mB{s4l zVv~YYU5FFvL)W7^(18G3M}Rq_k>F}16zi$hYJ=CILLe8y=k~gwDPb$RGqz)_Sb89- zq&|V{OkKQ!)lGuzW@j31cBkWZA8lXH0bJ|iV}zPoZKS%o-G1;Fai@((DlZASeU}is zC+dm-Q#mYx>#5i~+CB*ZnXDAv?&jApq%}xlW|i@NH|-}a<}6&yUXnfe*)L;! zUf=G=i(5zW^k$a=*}N;&Oi#2FuehUUdM~ zF*~tu>uT)ZVn=J~h~}_eDD>Eb>I*OPW$-bz#pd}|@YY`jH?1Y`(Or(sbFJZ~y_5=V zxdPdm@2nKaoEI!bpp6F{zF&mZ-&iYCj;$K9;&Dzd)@vRhq*SZ@aI^vjs)Ox)}xs0g*Y zN2QQd>asMUAl9KNbCBaq2*jjMQSw|;8u3i>R0NnnLXMJTzu!k&Nn0&(SCvZqTrP3H zGaC=6%$`z#Jr`9*YxzuSy^iv^p3G1EkbI4RjG+oykL4?fJsziWn=HoDX~J((VD>Y} zUQ7{E(^O$6D)8<^CEgyd_!LzHTBU-S08EYoH>Jovf$ZV&8r2XkAQM|DAiF_83CPa$ z_>UrPqbpqXE#YHqLugrJr?D+O zwP`6AEX0=CR)m@jEv60D&sqeBAFN>iy*W1Ue&`BsIR3C0cHb_9{cL?${^|dQ=`Jsx zdot=;1jtvAY2sfAvYBN6Ujx~%?c!gHe+pzWIPs_V)BIk?@#^tW+`H6($5$Hh=H?N+ zx!R0}lO?K;@fa0ZM~Y0aa8dazDW8zC2}#-u$RxxniW+N<+^nqRj1p52Be3d&ozN6Q zoB74Dh7hX?v_nN8|LG$LvY1V1iruWBIdV8yO{bWyi27_TB{!x486if%JQyT62C|gu zQ5Ek5lawupVv_i|MvITh;|#HTDwj1(sLV2sj6Kg3TQ>tvR2sf#~9-Nh(m%8y-n#)ht5oC>2XzdDQ zch5KB&V?q`b15LZdF6=O$XCUqV`}wMKz8k9BaR;}#kqk>oa!vXRAVkWvZGK#RhC72 znd{+*0uO$s0o#!4ycUNxIwH?yJ+i3A4m#KqU@MSLTbZ_cHGyV_R9eO)s<4D*s}Wz!P?gysp74sHVvDw2iOA(Ek>loxwDp^i?65%%ZIph^R3~SoI6EVHodXW}?Zm+0 zY_wz?%v%wkLES4Z((JJ^FEQF8FLU?O0g2()Y@K~?}o}$d=Em0tI{LvbA z-3GJDZ zhKB^>uR(UVi(vW$GJ)75f>IzR0DH;rE%8ixAo;!?P$9~MikT@D0^5f}jFB8FGQw}F z0MAcQfe~IWPf&$@3IW-dFq;9HKx`&vU?wFTqRIrqGJ<;sWG@J)SG1N=y)QOWKz5cO zlRTL;k4u59G?PoRUqE(gQidwlDqH#NS|={^`(B_j6_`D`(XDn_dU*RNUeZ>I8hihI z0x$0!!-a`zoE)scql>heO*uH%U5bICWHcoDqr}e@2Wc;}H?2W)pf3(@UPo278u^=? zkiFgk8TP9c$kJA?`dO8IvX_a=?GU%j4zaYA(NtNngqNr>fmz7nrL?T>NL{xP;WjG} zV!ae$Hp>yZbSXlX+aO^15=5+9MJ09sM-C*RGkYKU^Rtk%YbW;DEJNVpl?bw0iC{}w z*2RwSGg^T?rgrc%wTFkaD$QSp4YL<3MdmzjF~U~*!2UZz?At}3L3X;=7kKNz^G(j( zuOQRJzXD`mmS6n0f@~&!{W>+Ohah|XWPn%TdfYl&jVG5I@PhH|TorB(MM5?oKI!XEWe#r094^=snpAn%W4;n8@mQf5!43YEoteuAoy z@qz%8ctvmPE{+AiN&0;mXE2do?K{E2uAtg%fx0y|A+n5@I!XSV6m|I}Gu_d-sk!{np zW-P)UV$4LdAe=W$qgw$V)U%rkI6Og@`QoVK8P7z$EDslf@H6EPim6nR&Do@1e zx>z->EQVL>a@S#kkxZa+oKqh%8 zfyR?Q$yFUv>PS`*1!htX@$wi|*RZTWYCxt`7*Bdlqc^SObg4?XKb@q#BgCGL7vb3$ z;X;r-9-;-MB~-b%j}0iq*xS>!3S_E?RucYHV;WUf zqd+EkGmRpv#M9Hf_*`mJicIRn#9GSj<5ZB-Z3on0jCBkaDBQ3{nh(% zf3z8+rD-S*bVJdu%_#QWh$8O|$lq*_gP%Z_>+FC$XGf&1T88x1D-_I9mfIqcsw;si zE6#@MYwR7>Jt|eS&TflXWH8#&( zhz&nlVbz}uvF=B6H8y*@nGGJw|};k^4ghDn~J>VbB~YV?%77%JXwodJZY}+#JGR53U{bj zF7_P2$(AHcR79dDb0@09olz0sga#Ra80MnmOJ=$4;)~9$RARHs;7-A*w4`(SQb^ts}!*8!sLVs!13hUryr1y+JkeY@+)x+RGDhYq}X{`$}mh3Q-a5 zi>w{|9|-c~#cV6m9G4+;{U>X=ZVd{Y*W;kwDx@r1gp{RAuy6TNq}kf?Xp1D;$wUGy zQIh-uHQtY>DifduT3RDy;bN5S+Kp&h(*R2|q^);EG}T@7YFk7Qj=L9HBF4!cgEn+6A*(TVgX9KtSeC$V4Y@SC8`K>V=zBi>+ z-2(e>E#UB-B^BCYIL$YJ#h?EZj`w`+wfx8N?*N%VOv*22AogpJsjrjL3Yqq*p!TUH zNpfR+PWG(C^KmsX;U-Un+XUGqUWqS{6e*D1nkd3mDwESkQZQ1=E8Kn`f^0oX{i&Wl zSK=xP%DtaKcBV02)r^TMyVI#rM*=cYNMC|X)pqfBk&rf^nUaN> zoS1+@Rt5!TD%n0Is;mgFcznsDemEd5044BH1%Mj;$~nbiF~>J zWP+-2ynsjE=WS75_l9#AS-5{JS3&H?(F|Pa+NXio(Oga02tyz#b!-A$ftsi-dCziG zwpd{N#bct%p73{jLWL%)mXFW0d@iq$oYzBswtaO8m~7uqWp)sk2=~h)CAd0Pp*E9| z6;6SfSkPO?2_dSri^ocF`$WBJb-G26T|3jDKqhm^UOgJ7BAddi2SaM6zZAv_$jf0q3!lx^9B9Q!rcw`?&|moDPb zMn%ffrAVTEOdzxbW}?tymn=st)t7)Q#B!kmS%Hr?qG&e*t<14^`4U=BzTUwO@%)~F zHj5CrWC-gL`WMVD< zDUi(oY9@(41G0CtjmkoP)L2OY+vmpwZjX-P8c&29ll%wd75yCT+10TUJUm^4o3vfG z#tLw*BNao%foMzfLT$7QDuOiDvN^&H-O1Y($fWSKiYiQsU?rrAUqV(Y8$t*;LQGaE zt9PwN#r72nUJ^AsdEeI-wY%&T)M}~X8bY1WxOXEuQamwI7_2}h5Sy-vQ3Dh&wP*@o zZ?|ib?@|UKAd{M|&x&k>KqA0ijsIM#pvo5%z&@=6o|OBva>u3Qfxu(Dk=q2BSj#&- zngs<3QDXu!Sshid`V{iLXF~F9nxCPm{gUseU@6~^pnE);ufQi(QtHa2Y(&aMW;y_* zr*mf7hCD8VW+YRAuW{A=`n9 z+<6^x*Q~<+6;xsbkw7essw{QcG9=q9RUlK!jCM16(Gq1dBNs14_@YG!UTBRh*DZ*% zTa9o+%g@XhyG)GXYoHGwLqm8mJoF8b>F$ZK+!{A3#{Q|upH~D#9Xx&t1ag2zazxH0GZ^-%>MX){RFbDUqSYZ_*Z~Tsja_~ zBb({9oKa%}vKfHQ#LtRM?rT6M@!`!hZRI3h-R|Z;b|G%^M3*=}n2$R=2_KxQ#C4u{ zw~pn123co@FItm5P`6j=#5SWd(U<=mJ83OFR2!1ijft&njNGh&7$2+Jvli9<_McZP z%eUDokk$IpQf{XrBgo3UmnoR3BcGF!3|Sy(rYe&>nW!?!ksYs%RUnhbaRHeWzDjME z!0b`4ra1LWHTEUMWWK~sEne>xh zC3s}&hQLgoSB>eS)IQl{1!?|nPkEHy%_oG;gNaJqKT)T49T%JU`X-eYLDpFjiE(~U z0ohpsQ$AxE>mv&6(s+exOOkE?QF3B8rS?n)GM*nR!|ij;IM3hj?$vf>E8kPW%kjm% z0R^&~rjaQqL^j4nA6ai?t-k-hGhs_G^wz6aNN~z5huAF^PY!X?(^; zO3Xk^RwqBcm9NumD)Ro-INm%S!ktq!xXP3A#&|I<4dvmAlpauxNq$Uh<)z+(IMb4d z;gTR6&EBOd?q$|ji%fA%->s%h$g~Nm$Zw9>f+KNTX(cwQyqGAl8iGs!)=aC}5I|e$ zOEtEA6&2VTb-Q-QDpU|)l|IWA$SSw3P-Pji$|}<350h9$$P4z*M!RJQQAJLLRoB30Q#h?^ z+}KPln+m>GTABo60&Ib`6!;22<>x-*>*e@zglbTVVdeWV9*>vfKHtMVT1-*a_o<{_ zU+-4Q|BljdjL9AZRFvmvT`v=uw`oHqop5!kT1~uoe7Qr_k;!BXsWTJ6NqyN}J}1`l z{`F2ZVDb5VsqR09w~t5EwsH3_bm98(R*W3UQL601UVcJW=iwZ~`%gO7K&Wy?HW>CpX%0apbUq z*fpM%7kIMVj7sQ-cf% zv-U(8-{VeO=%Os8ia-J>XdRkpJL~q?D|nUr*s3V=Sc(eIr6_Y>f-3Ljs1l1wur>NS z@ar7V5Vjsi_is}hf=pNJRbzYvVqz@?WY^pF|Fa-_{b^NCqr@a}u8A3ti2@V*_grea zB&S6sCN*gSG3n!!kUB6`UO{E5S&bxk2z)8^cyUbX#t5_lDypGkyc(uGJyxQAzPy)5 zM>S)CWXm>zmZ&UITVfqWiQOGIgnRrx(nvnD5FtlVV3I2nm|bW{Qorl1_H?zlG1CGi zKVQ|&@wKXdlj`Xn)t_n{KVGY5kG;Cqfrn=s&`}(W;rcjCw5ISg&f{lYtWpV=sphT_ zyfUx<;l(zk%4DHH?B*3Jwi#O~MX}PRB$fS7?i^KW?A^m-YP+~cmwRz}q7i2X%TaqM zT&XgdiZR`kgWH2Om?+(cq>W3_9_!BwlqWK%$__cLLXLwiRoO~ptX`@>7Qe^>iA$_# zD;E=D)(T{z%;FX;MhtJq+AL8pi>B=iwYEmg$`z>Cu>%ncmmtK#T7|$Y)M^Q~=^JCW zlvx;>!QWyDJhTi6KU><*Mex-%rnv1?%z3s2HqNnx z{a<9YQWTjL)_!XZ``Nm*mj6jJ{emF-x@!4l{5wGQ@ht)ND@CSW`wN);3S{pXw3N^9 z9mSn<^|*NK5N=Nv(?%XvasPNF9@82L$j*1|$EnstOw~nVtRe(Mg#k*H$?9c)mOln_ z0#!*yTar7DB)Xw9#SdXSxpdr)|-6c+dXNDxogbZmizuKBk7$vLe9mgx9aDw(&wwV)KDZQ7nF^TMjDP7=suT}-63DdCJ5tf#l7w?dk}+Ms7ZX)s zI93{nzPvpcI2@oRQ%Emlf9@W%@AFbHljOXBtTk3f^K4MLuGUazv`FHA_gdPB}a%VlBmTU2IID zQrV{DNjO=x7pH5Y70jd*L|~>m5Bd*%f?*LqvtryK zn3O7$db7*2Sx7#5sHP`dlQ7yChm#%qHOhOc3J=fAM!nUzMhhw1!`;7lL{<0;#H8%v z^2u6NM<$8>M{4rL7#?2l!a1rx8H@ey{xMvgZlnc0f(xT{xH3_XwqmMg+RN#dTr?jD z;r~l4M)DJI$aftIyw@RP-7=)CutNH(g*dp@1_$hyA!)fa6`2{WrKJLy*vzZ*{TmTi(}R0*7x6;4;?=&a(v* zstK*~U=_zoLe=V_Y>s=3AnVJay-fE(Pr5H{ri`|BK|>_rC3!L`vewWI1ex^PIjY2d z&33|!$NF6a8f|11?PbIE6{z%Bj2iDHsNc4Xpj(F4z_n-zbwGQ}Msy@?!LdVrglDh< z+4;sKrO3|LC*kH1X$sf$Q;HfAm^~jV(hMmi%-&FSNJw+_3mJh!fJumzlzOqx;F6I* zooVX6s4^K7bdHw#LR}0lHN>enR}+Qlq9Baq?!s{P4i(1^?ZWZW5Y6id92HFhS=wI$ zPF5jhHBzji)QkzlGzGAlLfj|3Xvp7Mj5#bHq)Z?^5Kx$!CW4jp!&Q_5K2Gijgw6{KU$5m z$0~7dxDo?(`*D7t6eG3i=*ZuTia1{axdJV*yKrFhN@TjMz}|&=NLxw!xWt4Ivqbzd zb3`vRLb@HTJnNW+B05vyh5R@?jQ;TuduzZH@vDH)OAOL74d>gqT_* z++s2IP=Q4*T#jI~MYNjB5oERm?zDvd#*492&k}A_RlZuL@Sab#rfo*WWEpQYw4gW`wd|B`~QULE+3`He)=f8jDH20CjJSKDMj{g z1ewH_Ad~p`_Jo>TfY(%FZzqA5BY1tM1NSe~;@0sJ+&f;(D|n$=oxDcXago;L8c&Wp zR0IMt$&U%hM2(G>hpLrBdHf2M#}w^Sch)X+AKb2BCe`>y61J++39056Mb;ebgr=Z% zXxL*vMaO0PcKkG)`AWV6rHX7I!E5GQ827?n#yCg}#G6d~7>L3;i%z8jL9_pXu^&rJMw| z0r7Mu~|klVaCC~6+woymb8}SNO^s9wN9Kb)?$zX}X4;e# z(0H6#<&y!0vf3ykdQ_!8t(G)}KO(#(j){_oeJYa#b=~TkNLT&O4pyYQn|& zhG<-9rgCeJRch&Mz3eN%_tkkoCG;hSrOGEhm0n0*PQ?^$ErBM(6=(WCrNC8QBg#=G zzsgu^0jj7(f$SC9!&9|;7052OCD5u;MScR=ZCcE`!-o~jWPbm{DSoe0)#%Lk!%$@? zCL3cE)C6Sb_&Z4+O=g!#K1^08MVX1clpL8TvS&AY@%)x1A0`QZyqdp&oj+LXkGzN`XfynS%hqnDexY|;Hf&CH4_jEw^ z#uW&+)TJ^rKq6sQ;j;;cob6~IMU5FFd8q{w7MUQ{$`FZ*%n@T{jA&~!?6o#UB$Zeg zZwtucZI`3O-4hY!w38;52sSb&?3O8I7GP`ze@6gArk7hK;iiFKdtmqo+iks3T_PN;5yaVah`Bx8cY>PqZYtsoF0|_DgQ7E8Z2I zyxkJIP9^Up8iVZ7K-(x#tKG8_B?Om1t9CoXcM+<+tx-vkRr7Y;p5hJ&J@6Y2{gGa`6!i>B3M+iUy50K4^X{P!3|4j77HY=b)R21Q~xC;7n%Wx zQqv}dtQti)V{c{tn5x?6YgGX(;U%k)0#!-q3oHemq72XSf^wRlfheM2HP#F zNXe54$mFvTm^~mI9}tQihjw6$DsG}K3L`ZUI6;t|r23S_fX5e`)%YG!V*)d=mr{Zu zFq28KkFItqc-^|tg7;6yRPtYH%cL~p+<>$?m8cE^*;4M@a5>t`<5e^Iz0=J&T9rs8 z7>nM57*xb~tJTYi{6yq=IilESJ&HZo6JRc=+U|;M=hcLoA)>4esldz?%miX-wp3$; zSB!-bm71A?S?m&PWidl6%@Ak16eVsR2s5=ppn)lsnVGVfd##ru!g?9}49u}x--1UC zz(j?KofK6j+sy@-EvM}?R7J6_vy9>LqcNPnC%nEjR%%Qt{1wQ)F~{0(tYH76&M!dr zwfy4C_!mI->w?%BkO{yP%-;U<))MbeeNOcM^kf(>uk)%)HTFQZ`9D*kKz6BTKQ4Bp ztLE_Onpj-x%u;c&HBHrTooYy+y(B!2q~al!gKTthx-A`}RWTSW3`Y9_Uu7@5_WPo4 zud@PK-##z&B)XxUHnUkk7DP1`yoO+MKx4>S)CR0Vm7gujeQ76mEkl#v3e*YE2(TI- zD^zc@Mst8I+9KDYIno|&3C_&mZH@l=?DdXG>MQnXKgXqg;g)v8r|{DyEr`IyBW2Dw8_+-d+skt9Ziq z@TfZr*QxGKm4&I?oaEw8P+f`oyWX=;#a&*21Z1*FuWSe``OSNyMYvA|c#9D3E7*ha z+6WaBRF9`=qo>W-=8+$}etEwF$%?U+cnIzSqkW zl{noeW3!8Kwl`m?GJ)4Q-tVtV!AMI6E*>kxx&9*bmdBy(Pz1_jeK1*(j=`*Gw8r?M z#@_=&iQ#DU_ePri5~SEIRI8b3s}~{KN?+y9_R(fWo9ZB*P>ZuRQi}o63r!HS*aA_D zHL5JiW)TWDZ$^-j3GJk*DxUSzGr~@7eTE^t=V-%sfdPEx>l0*VD!jD`Jj>-sS-S=9 zbB*CnJLxvZSoK_Pnq@*&W}>S5B|oO>$RtPh7c;D(DqH)5HcWr_f5CLORQ9{!>-38+ z;|q|@OurD2y??#$7a)^W%U^>`!HgioTY~KEDV6Mh_wH8-e?m@y?9~L`KA>H=){H0T zYZSzu(pugh&&QdzWTnQWpYeEgJT4Oo*9iqVs!eg5lX0er>PHGgr^|7fC(lG<3PuUN z(Xt41XYa&do`e# z%Lpx51fb3IwI;|cQ0ZgNe{>rvI!Cm{FbJ}NOfQTV_~SS&?up7swaLgu!t7cDt=^Fg z&9K8B0^n0A#FruUUJ~;B?Y0cuIwGTa4*mjs0T$rf9 zXsh~ZH}762kG zsoJbe5l*W)V=+TbP2i`i%jc}Ie~mqYjLi{XNLU%uR!SL$wh=t%=qQN!Y8k_At^uN! z*&}AT6P&-%;&Ub%HTJEcQe&HbloAXpY?viVOjMbL0-4>P&9UZtEd{a@T?E-%0oh+U zpZ|Xp|9=OvpMF~OGsr%6P-XqH{6Zim8|i)tvY+0_m})-Hc+30m-kteJAp7uq6ff^| z;>Fcwyu8w=W{o|VD!`Sa2h_^sXjwSM%4K9uEY3Hl;ST>PVV3P#BRNv1GVU&>DYG-d*c_cK%2EHZO-%n}c9ZzaS#iQ#~+6`+lJ!958e_?okojQWxpu0%|8%gf6>Q!!pwy#Y||WTZ1}+p_J20~ zCCGkQ0P`7;z1#W~WWR`C%_IAOe;de@t(29?H^=er^$EOrbBZwIYY8${M<&m|nZ%pN z19)~_riV7G5!TO6SK!8AHcs>8kUZF6VGu@2!!c1w3)z%{yZwi8r9A_u8lhQe$?ieLqf0ofOr|7}bNO3}ZK%6Su0iBH8i#XsRb#qNK5WJ=&t3(Ykj%8ba+A z)C6Qr5%#!^P88kKqf~r-`FKvN^}Lslchjb}=ip9LCayPR z;Bw7AT&ScPsz|{3vN)VBio~hI;W&9X6xS-_aWXdmLn#D*pgjuQtWdjq1*S50;(BE? zZq>z8sioi^!NY8 zB>`vJ_u;gZn^2M6n697_(~P;6aX+HUBtIsqOj?&@`o+h`qiU6MoEL}dQoxK zX3Ubsw3kNMp{=E=|NRY&ux-8${0vRtJx@=8%-?vSQe<9QCTb^hf!NmBhCC8(KN?{Z zVYcx*#`l_Jzbe7_jyCf<3#|RKDM4oXOOSn4WWNl}w(A;@NsjCzAA9qjAbb1E9NEm~ zBVSreRS^63IHaFaCSJUGGtJ@(TZ1BoABa1?F7};rOy4z zGLDr;s$7>qOhPsrxj#~ft38<*rQMuvpc0@Wd2yy5S9p@2qC&gK6aO+5i)`F0o9GJ2 z>SH&dj@I&sY#tKtMtD)3#ki=b4|7CKupOHBI-w)hMcGTqlg;GKq-Ly*#~NDAI$F-^ z?F&)4%>pI9W~kV0jZ(iwDBQIOeVLvZFZRbskspp%X-XZ=R!4tUX4e{$aI-O4sk8fC z2US8}CHA{CtA3a36L5t#`WAohyRB43ZE2rI^<;mp%aRREMCHg)9v7fVtC1+SM^q&D zJF*B&TD!(HT&qsPEn2ACRmr$nnuzO#akyKaf-40vxKjDcs`Znp%9!r z#J_dMZcH55i91weS4$%?eUNI5HoU=qH754^;0FKh68D>v@Tg-S6=Mb-9cA<#R5>|` zdqV^;VJ1_2?~EMQgtRM7mf?7PJSO;eIZDevTr3MU(P|u%D6+G(mzVfjv6gpaL=V9w zAQN>aTgAx~44Fyx@>&mGUhh()on)Tby;HRq;YDDWe?#dIILrT!^R(eTrL?@Xn#Yf1 zVx(>#&QXP4Jz9*RqF7|@T#F+A4H(al#&kg(8X`SW8L$O)Azp~Lvq0=JV^vp{=dub_ zz8jSyOIvA)2s3RY+L&srB|#Qxrmr9tX<>>GQ{K0ii$GH|)xspl zUHV4YuA`4Vh8A%BaXvyUmLk~P2JW-Y~1Nnw;wFxqPwQ{-PI|CI? z-x{{B*S{w>aOnPeEv;I1I;1WbRiKrl@i*^Q4y|%_~PU zahxZTY|tx(mJ%1bGjX zXXf%BiE&0->_(-|1Z1juKhgw z@sd55pj|p$r>Uuuatzs=S0E+IY(|~kB5(y{G8$WoNG~?UtJS|t{2gyKYLw1x{tcw~ z^~MoRZ>3bt%TYEt5dg~L*QGLFb|tTf#l>=}z>>YRf)O}hv=8W-~-aEWpK za1?Iw1io^3FRt+M8+FMzT^gZTl=$?0?zX1k!IAyASQ3fL#o>4+duiDZGAtoH3;y$A>8@vSSKlFRnM^`Gp!hIa#L4Eo8q+mES4|R=F-w zW|H)m)h+>@fb6V{ccyxKe7pkJX;%bd7kjdBjaKSnS0=5eX3tA$B(INhQPW*TjrFJc zpgX}`CHx!0*P$xJ4h?(Pp)+B#24rDtRGv%sKHXWhTdKP06@U)un2{nx$Vcmg+46r)jq? zl!xJZbrh~u?ZwRoswgUryDdqygUPsB6NR(Ip*UAWC6l#N#l(T_7^Yo58taPgs7>l9 zc5phI?;|e+)0zG_kr{w9xl~-ViUO(IpPId;2>0!&DylpxME*@bo~gpeQ`DDT^vAfOC(;?GbNz9Z>yyPiQ5d6I9QKW%`9iiHW700ofgbOca@1ctnv& z`Gthk_({%F+R4OTj#ousgbG%snaIG*8IawfwUokG39*g>w)?y-%Ipn6CXb!!lf2j= zj7v^b)cSE+%)U%jlXkpyAC4RfzwURm6dXVa@1ebaaqa|%O0+(x{CB_TI+t;GN zXSD)Z=^ke^M)@Lr(=tRZ(nAU@rYN#p=N0G(@bh#t1Sqr7AO~5;H-lr4cUWlXnT`^U(8z;(xaHdvf`A1V}#o`hz@RbIFj3IfjtIf%(Wk@w$H^t#XV;s)# zWS+?1jj=4kFlz@+X79ok0_##i5T-MHF_f?cJ$u)qL)0U!aFhQ^bW$k}#JTXf%@|2` z!^zAYxR4)!vxLOCvT)qw$t^ZjLM-d)vM^ON`{sBte!5r(+&zMyuG7+=t-upL_VQF2 z-kq(&hiM*pK{y(@30>jNICCfnSIVLkOrLZgqzcQzv%ze@o|0a@&J0x$ zd!a2ufow*N)kkhrGxx<(4pObOMZ2JR?*`2dNnvZz97FpU?@VRpK$W%@?QzcNh~Gr8 zZBQVqrlpj+v6isaXboG5meA#B46;GlHWO6&S)th17$w`y`T8}O%=0BMf>nX&mmpIB zV~85N#`h}Q$6X?5F1HYHt%O?bUQ8a|jp2h{7)kfQNTMso6I{_xYumJADM~gQBhN_( zWt&aVvTG?u<2GY@pF7TH@4)#(yKt=}7*CrM@#IJXE)fv7I+Cflih%Rgz@<98J6Vbw zy|lFb8Tfd$7I@H(*H^3Y=2|V@U$4i*>BD$-s+g~>Rg*R9_N+x$=ti8$4x$oE#Ca` zTo$7_%pG;1TT$fig6YB}>~mavC<|Ik za|1$*YRt?~Sxf<007LR*A)?CUK9yOT{aV^aS*bKos!XP1$cDe7%sgi6!gG$EY8v;L zV}MQHE>IxbJWF4JOq7`9$(+B}SBlK>PX<^kA<6#l=E9U9JKp&fWdA7s{W&tKE&@xA zk`oh4`RerqZ%-;)`Qha-K0G~&H}~2U$R3_7rrOF?a+!w2y4Y$-loBFG4;cbBU0=makU!x{K+vmURmRN?LQTD)U?Ak1Fy@Biuq z|GtA+=uUN0lW{NQN8(Cx3~tpX<55Qz?sXneb!ra@D%lW4ZRk5ypyKI7zJi&6OrDno z2~~Q*xYm0>#p#wfs<1%x6>LZU;q4eK+==c(-WZ@AmpU>Tps7Zhi~1tS?w_v1jmdHa zGfmE{3HL5EF90@0D@htlM&=%EU{O?B5- zn}ngtMB3U29Lo+y=0+cyB+V`}$s*%R}{06skK#oIea@bXG69v!Ex z>_33BR3`$mGgK~;=pQNyR#sDNiA-X6c9Q?teY6T)X*l1x52u7XNobs| zPsGrn0A(pqT&*W3BX$7*P}H-8o@WHB3A)hcdF}W zkkth(rz)eR3tozbz{O|@wn1ZnHEL)ti#_#G;$?tRFC(SYrgFS-igrn0CetS_%f=)! z3Y+g$#@$FSr5c5!+KUe2Zts5F>muBaB;k5P6t31p;1<8`dgWf+AjEG=>4{A92wsCq zcMH^bS!0;*{ZxiG?o~(NS!)6wx5eS@z-*v&*8ksI-sQ?d65ZAH9dDI!mcOi+7?U+XE9dp}54? zNwQuN_%e@70CtlW_cB%Y&Ew^`cfJ9)&(z}LL>Wd2)Xu6HoEgYhbN(;(AI6QrLQGIO zwjJD!?wmbnN%uxOEqY0ktJ)Xf-kAn;@ZvUHoq*GIX=sVuiX3OcY2#uXUT=*Yr$uNA zb>oH22SvMOdq6LQTF%FTb&HW^XNk0x=CqfNh_lv5*4iaVv$a5ki55fqGsq+Y^tBYo z0u2qYQ%4Ja`nvEpq`Nh`_dVdlBUXZ^!zo}MUEv-(do$E*4y z0oln${&Nyy0yAl4l07E}GIygoL~>kIR#BVOh9d2e&KTRjoyYa65cWv4lWP2~i=b_c zl|3s(iEU6tuI-5~7&zdi6k0`q4MDaPov~{PG8+Z5roe@04UuvTGgSJTpu)#kMWv4^ zCJwk$l?C8*dAMdZvO)4-2?}JQ#$+2e*#YTZf2L-t1;PBd?*JYO&^nWGvo#JkX*qAp z7IOreB>t~anO>w-nx;A%OLjx;_9bZ8ZG+*&O}JJ;TiKqZ)EFiY;o;F_Je#vH#iNxkBHAKFeEDkf7LbXtOx4w*Vo=JQ8HvwdP}&uC@YM^x}mIX1??1@$m&zWPF{4 zCBm(2;QIYsrOE_k0HNM7Z*lCG6Uo+Ga zWX=9dFrMv$6UBizL%VpPE=uLXWR93jp%6={X#m$WdO!G7izTHDPX`2OX}H}jv0n{I zl%)MNsYj#LzEl*3%LM#cX^Q9XP`7I-NC@$mvd zrtD=CaJddwyHZsC?kz3iNrKs&jI)>44BiwZ1h`7#6>8+}$}-gD+5+`>vV zle>O98=gOEVas1;WAnH3u=NKmWi2;jp_%ZSsT7%j z>`8wH9?GuYNB67gu#!W&L6BXSvW?1ETrSMR$S%Z$JeS#F{8_h-q+&eJ44H2r zJ2eR-*VRtVD2rO8k2o6x9R1h+4Q2fN6vn#FGK9{NZcx|*KkQEa7vOqTOsovKu?yV#jRctsOp5ty!y zz?sHarQ*hlgE3kZgud(@=!oB<=?e^8t6FQSw=Gpe5nKH22%+UT5^9f*y-rkZD``L1 zpd(K9yIh4P+RWA{Dmj6eAHfx7r+O+ILY6BZON1>b;Cm z=V^@M%{r*vvls)Zn^p2&!HlZx5>M6(w3iZ+Clip#y#41xJQ4s>m-TFzs%+@z@jJ?f zw(rO7Rz~AK+^$K+?TR>DE!d0OCDFK5OdD7ffg6Xza6WSvrcyjHO*J}};Eoe%+c2?j z8%Fo}s=U{5syD_ncHmOsUOa9{$AjurJgG^;i@FRvsY=Jga^C0hN!L7Zz%z<6~SEnPH@l?R|F z&xdx>9aGgo=+5!LSY;q4>LS&o*s*2;r;qAtxKM%Y-U)u*XKGd3lI*f1tCOh zc3+8vh4XR1))2XC%#m$pfpWJsC}hOjnxeqdiAvrL`L1hd4QC;H{c>d3EkuOTT&2YJ z8ZAJyi8f-W!e&4w5k`mw8|h-NRQOYkNl1}w#@aPXk?qvdqFOV6@7(!_Te4Jv%;U%T z@S3F!_wQ*hf1st5AjqWJU)q&6eNS8YtsXXfqmT7}(ZRYu>A;>4Tm5_8zY4Oi*76te z&x33xNA}nDwN&w`j_lc^A-sJ_HAV}nW{**sy?fk?H}^X5;(8-q(DumEzg*2FK`guZ z$VMJ#o04#@B}LgvIbJ_{5YMJdmHoWXk*u!pa-}~(wR65D0mmyNF;W<)qVM1~RbnA? z#cFohDu@7jL503m`7A-*j^(s}OVp&-wve^xl0HiUO8|C+YNll8A~c4qrUIk-3YOza zbj5B!SDb9-yMhXCnM(GTZ#PBF4pZ7XbF>m<4YGRarbmbwqS4C~rCW4R=&FmR5L*l% z*ox_*-8fwpO0^KB>c-AB5YSXvGCWac?LQmHB`|XFl79nRSh0#B-w@rZ!CRS=FlMUi+^Of|;mA6F#eMSU8c)urQc z9o1Ije!OhS#H%LS+NxAW8lKi>;C|&k+^yt&DzRtnhw!B5FyUILf!NStWh)?hV zSBX;44{0YA#CTL{jPMnB-K4s_)|0Mso^sKVDHq2ZqA*z-f$m%%^yd5WA{C)lFGtD( zFv91@s2-1Zq~ijAmRLtoUbiMoRm^~FyeS3!Alf1{+vS?<6}puPHSRZ zP#LivN3(aUjZ_*^+|iTkkNbngI8m8|TBg{}& z!7SWNreati%Gye8Qj%`BS^+K8)D+?7=2T|}h*`K)O~Tl*z>uoVoc2-&Zr^G1NHzAo zjslq|vW?&BD1bSCYoLHO1G2Th*C?`?WdBT#?BjdMZGQ#Xr}(#lOw`yfK=#uarOIAB zIR>@q?uS#fl#>c%Z)q!^UT?yaOEq|Qp^_lu)%RGQTC$fh%mT7=&B-e7B{gLdk|TS0 zQf9{=!sSk?HiAqPnSktEb3CRhLNO$DSowR z+MWD9RA-{dDz<2&e6tp+UG;g?LH@>hsNmxr(RLWk_QX`t9vrU-QLRf-&3~>wPL*Rw zE7Aknzo#<=rem~$1lda|Z5Yc_P1v%B<%}x3+d`1F9KgdS+U=TD+$u}Jjp7)UpubZb zjr(PBcvuz>5Jo>WW#gxo9K3DGQs8>Y<6A!d`bZAmv}6-tRAmI20PJRE3U1Y><6awo zUe_T!8aS*r<`p|BTf@nYNHR56ti7yOK9KiDfXV9Rj2gQ&n5mNclGs1h9F0r8sW?xN z4V4F}A&Qa?=sC1q#aRMfa%LlCL29_-bW?&VXuUF8tjaB}jF+h0$7P#1DR{lmM_|<_ zVZ1gG=h_cax$|drF zWSoV*24u$C3StrZ^AV=M03nP}1094?kp<}MAxIRNfwVALsC_U+iS5zTQ?Xk|57E{( z*rjENZFBXoU0Ra9nTM_4YAKM(>g7zbf5Tt26v(7`daFjdKaQEW3oE%~pzR3efmlOj_A*)ztg>3jtO+hO@Q66O2(bi7(AugdRDy;ubU1kCHA036c?=+k9R7P_*gpb z@+b}ES4$IctvUsF+q3a_fR>TgP9^qdf)|;Gqn~E_%Sz=ZkO{;DW-}1GIdG6RE?FtC z6D`rW+MkAtJt<0Y9jgq(al)%7Zx`AQdgD~R~J_n3c@f(TUi)jhdSCw*`q;H6V)lM=r0Y$1=`Bn z-FfIvq2)~2iA?9kDDt#JfyW9Yt~OBj^IUBaW23Lyk!pQ6qrz(=B9|Cr?=n+<_FFNW z7^Xm$w8T__EP0`^24V*D5w15+flL&cM2NmNg7tL~Zfs0QEr9o|9}!`0Mpd>L+vd%K z_w3oqR{GA-LgLbu@Y6AY`*-uO=})ua^2b@qT6)hmP>M`I=K2F|WBvAHRa^ugAYlk^ME0N$uFXS5s<~kDAXGHButD6G9#3`n^TRMp}?7tA>1mx2_|oA6nk1yIW0!j z4uZ{pr3$&-Lu=X|?u3pAf{aS7e47<2cUq|8SILnH$V8C|#HzduP~$F2ObeAR+NgCi zBs6uY%I2v0vX+Py=uFv&{wyy{lmyV`gsVbXsrZ*le^F&J&r6C?#a6zUJcJj=58?TA zE}o3%;NghWWo4-%TA8^o8vx&GI{+D_El|7HdH{C_wcB;H;1vX9Q50^K$E&zqm4vHh zvAAB9h%4oBxKo>|z<0YmQN_br+RfHXJfXUg0gD2$yMvmsJF>uXer7C^w-*Sq$wtjM>*G{i14Th-mw}A@Y*pcNQ#_^{ z3AM&}oS~XK(Q^PNs6fZtc|oHZygpWfGu>HKZ7Jw0jKukt4BYI=!%$u*I`-{A_x_z2 zqCf5`42eJL2LQWljq*o z9N8D~Gsr-QeSkGVw&4@VIvJYHN4}g#CQy?ZWCAkT?(N01QFULerP?ux*7NO?emuF} zj7Jx$@al3s-cgy!)%~i>qUzkQ_F6n!pQv{4mgZs^tSEIz&j_;TCrXs9JkuPfYLZSh z?8P*%^rFTDWU`x3Z-$rZofL&t>AMgmZe}Rm$}6h}f#qh7A{T;(x9hhr;g#14Weh1{ z5Ubf2u4vv@==)SF8K=yO*JAo3%>dS8X?^-B`@mEK-U7T3=bI)KegN6_Qq8x^>jwI(+XNnTO71oq97J$u7?9l zt&u46$Mm!irb}z7r>#OMG6QV{=;$EW&rL82y2r~QM>8c!=-R}*s>Q6tw z=x_czO^%Ep`&!xmWhjV=M3wte6l+Pv7lv|np(EK14dD(-RjHg9 z?PT#LT1!_`l+aSUu2Lc=z5)Or}8Y|{e5Yc6Wtby4G{gF?bga%MGNhWxqwd2afs z*Fk1|#Z^FR-Eto3Yfs+-1I7b*?}LxAzv$l9bX)!RXm!n zrqHU_cT@HCYBnxW8v^q)5lBf+^5JM6o*yq$iGBf_9K~u%NMEJwnxvW4pNbQ8;poos z!tvTLs=5O>-A1+59Eq{|Pz+ZF;8@uns<99pE7^k!Z3#Hjk%VJ)kvLXQ_1&68B}c_M zT%hu0vJ3ffs`IM^w%EtUs7-21zpi9Yl=`nhd9VW}%OcT9cuBIqJ%j%T`BdlC@ff28 zKOy6s2=&6?jYwHdZrk_FR=ClL*$Ek05<5gc|Cr9GRbv zHX<#|v4hIYZ-Ey4=Ic;(&4-_sY+SNjK}=w__1n4F{O38eod$6IW`Tm4fNab6x^Vf9 zYK+#>i4a@&#|7$W|9fq$A1^*2@XJdo!hJS9&jv;zM|Gw+#=e#$>hf1Fhu?+Da*+l$AVLc~q8? zc5?V|pn}sPxI=2oN=i&UTs4*l(!3m*|N8zFIr+;P#a`NAkhwf zf>?nwVYAsp12X#sDBeJONr*{Qx{E!uR5SV8704D6R!h(%gA~0jP~mRO=V?p52ts!Q zR1;qHJE-V*l)5olt*j)pDz_{^t*0KU-E~mpJPTD@b=4}Sm(H3Zfz63|~ zCOKm80M*%HZ=9?q%$g!`p(Tp8ns%^jA5{^7Lpv!D6E!A%lXnI(aJ!#Yk|7|I+4wiQ z(r}&1Lketf5mGnWX*a3R?hr}>CRy#2g#y`GNmfUnNSjw5l~n&BHHcAS27qdF6TU`@ zbng#Pb0-MW_`3&&_(5C+S4W1wIgPSgbBI4?$LS_m)N&cPZ!Pn9j>cTO~=D0q$4C#aF- zCmWKfKKG$L(F487UO1ZKjjBL9Rq)&pw;5%$lTB$pD308S#(n(!({|$KP>E_?l3mM3 zXsvq>2IF2!9xZhajwSh{CvqDvOpZugWsETEdDvz2J^T#6NAwasBrh{Y`U*=`D;900 zg-GLhs@y{IVxq+2P4$(f6l)o4tgF;mu+|&|>u6vmE0?0kBu}Plr39M%K|X;@DY7&^*F%s^eFoWEX;XTqnL8$GOswSN zhl6V3g-pJ9|4v$yCh+mq5T4&^RUmtNy#Zjz)&3e!$P-n2Rq2E%G69&(s}iW4mDQ|{ zG`u`fs$P3i@?zDY1XwuEH$_8s?-|M4sdm@y+2^h%y*7o~qi)AiwL)3A!2pMy1U9BB z4pWg8tkXg1Mh(m=+)PpKZu%KyRogAqNb4HHt7xN+0$Gi(8H%>*DUeAEQjITP&ttWx zky2y=EP+_Pw}CpAY@Vk;CJ+;~CN*Y_+s%{}?Tw+uOm;wb$~qi9unD6D-UPTmK`zz! z(YSsj0XN%|@NkIm8Iv4Y9v%}a0++jeR95{5)NMIR(X6N^X?K!IvywZz(Vjt&WvStd z0x|`$e(Ap?nEJ8^v>XMqhrJqzJ?N3mO?bPHU>lUCZ<#5^pE;VZASM@(7sqMq2{D1$ zv&k|AvD*XLxJl?;?@lMMlGJ;-N5D=}akZy!4ul|ixgG-b|AbJ2>yXo8 zB(Ee)7Hc7PsU8xR86bX%E}^A`I7>pzWFBHn=kvIL5Hm#TLKDQB=^@Tk7tuyqs_Y_8 zro&3{D^*#*{5c5JA=GF!rAX@Boku)qETU@#sp*zzn}LRWUKx`54L~&9{PX#AHIU@uf{JxwwTt^`X7Pp z{rj`ZQho_CQDdUQo;(^<&&ecMQE!q{d-tLbPi{2e*_9f6;PD+*nOK;Mk~=A(-6#ma zbj4nb7KJEVd8K1N&bK5fki9uwpEe%i6AnBg%x=)-Xpj zY+p(hW{QIK`p93Wi*hQnDpvw&y&ejkbg9a8X$J`=f~?Hd81>s1DUiu7Nn#_*w#w?J z7AmQ_N@)!Xw&8ICBdcIk-SaN=wpH=g00R=U!%wv6>i!}sY&v`WTOUZVl(S^ znxJd%3Jj-hpuOCHo^(crGlmYi<3zd3#H?2RdVPzuaMnaOyb2i=*P9h&+GD#nxkLOdBP#?#>< z%?{{evSBY3*pw!@FBcFAv6BL`=TqglJCv)+EUtE^@v}*#%}v4m{tP@A*w4>yJ398e zU?|rcr|ZLTnznMZCJ^H_{+OutN8A2Q=*e_b({!h6!f>XIs;w(k*~+2XDD)MDqCLkC zeZ>)|qJ^wYa>ryv3{F)ipek|$s-rg&PK4#bZO9H za4{yTV$qu9g>1J)NLi(igoSgFym&s+mg(T&DnlIJC_R*f)8YlRc?%F_HXEr_Wzoj7 z6~rW>jOQcXf`B8$BK7AXLT@fYwPzvLl>DSjoq{B=yRS4LcavX&k{Xshs&jYz(mugWhpZAw&Rf6-Qo>}QzG z$J*a%!R{Y)u=4NqvHTA|!0>PW1138>zJl!6p=lal&XDcbH6VNQ!HFQ-PbeLw@)B_U zV~~j&lW7+(o(-#2Oeu<$QVo0dP{{MhT8jli82ygFT~W?0FD)Ul!-ME34g9O4AX^sFrK>|L;F3^5^j>}xGx zzSesYN}Y{RxK0oG_Sz_NBv_n{QA~9vQRt|pU{+3uNv^DU*J88>+ESenT!dJar!gu$ zj1uRZDrEAy6ydGG9gIRxPSSEmV2w zpfzYAhEg3dp0$bgawEFa)}fnF8_aRVG$C-VDhQXTQm!_~t6s}TgE@Fia7YQp{XT+h zCI}7%4?<0VH#2oY8n$JshQLg$qHL%u8~n~}-m5nKl`ZH73nAOVJwHaJH6nXkmVMf= zmyb=BD3FO7dwr@>g=W>VSQW+IIC@ao{TYbe>`ql`?0)Y)4CJ_@lYs8r=S-DNRZUwd zN^GQj7p7_g6y&=1Z^2Ohb_KG_w8&S6veXVrBeiiDEZvLVf>87phN1g#h-y8mO>{%c zJ|8tTSOy6+AMiz+!etr+cz6(UMM>W#jrl0miAuvbNb^{}yvp@3KSY8bhQk znu`NVwUKN&3#ry~c!9G-&RSE%S_gKn+d#nIgGcj#|g3t)o&@b67NUw z`e8esUa!N)yUoCjMm(9wS6he4Xy_4MWv5FButNcuAjH(Zl}$;ifAR*E#M@I9Y6t6S zS*@%I!R4kXoE3GJ&y(b!H;yK5R&`*do|aTT%TVoZg(4??1+v3ywUKAH0LAO{KZ7iP z?E)OOpRX)tp|dVpcP+t@Jxfutg|A`M`cQqjQ)4w{^+R>Vm{DjmAqq`)6qjAd zWjFFC1BcXZ~-8j!s`Q;p}- zrFbxsuk56(9A9ovQ4Q!f7`J;;aJM@Jw>sm|PRo2G$pMYAYm~}7T~DQ5wi5$|KD;=| zX2~wJ)LSr+?X50K=V_y5I_#OQ{g`e^#b^~_Ruq9cf=gn&GETwlNXB+dR>xtYHWq{B z;h1brL|@y$pE{#z?mK9%+_8B4gnk zB$@w!bgHw8&C77WRv&TZKN4cvh&B8csh0DRU`kjSivs%*u_p6rDWz^q12R!%Vl5*L z7AS~?>e5c?Xi=3dfIlNZ#`n-xiXxNM%P4aTTFNVEd^pS!spi@lLFVD-k(!BvYGZIiT7_t@bblg%8Loee)=fQ;^X+~%@E!`){O1> ziShOvt>Vx@Tx(0hWRX7x4sKU48_f$;AUo5Lq-u?%d0ec_>l0;al~UPCf=pD4obWPb zVsPIUbnab;a&N+m7E;t$MI_Oi08KA&U2ZvV9MInJ!WUs@c7V=ijMfS?s3TAos z^9Zt~Xx?c*w$>KVX%4{ydI1e?xI%p5G#%P8krVee!$s!L-9(KdffekpiZyg3{ zHAksxju-pkR7EI%PfgxT=9N7-nnu-=jytqsqJRWs4+p5o2D6kJn}OH^0_^cn-sgBS zd_>8CK1PqqtSM74?4306~qK=ViPZQ5Litqe0_q-pY@l9W3*c8&{A>s2-W5| zAr|k6;$SCK1lpr1#0jPDHpp`_MaI(k$XTY1QhQVEGyk42n}>`gytp}7QKiv3n*M-{ z#o8*emKh>#p&s^G(-vCj;DC(@AG1W7wGk3!>$guiGO?C%<|c>`8>uxPe)Hy2dGWYF zfTpcNlKe9u^Z9-@yv0iXWj3}ETw*UhsK})BLdq>vpQVDB7B+vQt!$+f!zvXfMX-O= zR%*=d@8)6cZ*{Qx?`SQ5ql@ML@SO%^ZPKFTg`d8H?B~#cY>9%HCVr*JRJHy&{?Sh2 z<4@BnWNgnn0_)}Tqj)0|F5Zpuu`zsne+=)R_u}27cD$z=lhMl0rVr!J(R7@viBvhR zqx%V@%pI62q8clUR1;#QuyLRuP$l_a9WTYHhDe;O4#tK02wZNAz`1g&w=8e;C%K?K zc#SG_J+w}T;IKs51{373B23oks$yLvW`?65)O zwnZq|KqcjBfEsU8Wg*K5sj6+J3SttCdlst4D?JQVj!e{;SjxhU1QnH=SWYRBt@SqG z_Yp-#5N@7>5|O_p=Adr3A%@e|Vmj9a=gWL>p>jJ;6?`*$`~d5K2%~OMG9n+Cwnm^xiLbHFcXM996hX*n6!h5GQQQ5rdBC$b|v9n zPpW!fH`}7o5VcZ)tc5@u$@M_*!A%${@WMp-PK*@sGnR=Lxn62__Q~=fj8c^iS4Q9@ zt*Y#Vb)uf2sz~5-3AoUjiQ%G1RK>d~kagwk!I7+8RAup0c%f)cCm{L!L;fDqe0}z| zRVedckAm&1(MXt;crHa}$VN2!u14N!BkZ@Hjm$+0kWJ;4w}Ps9{bF9=jFG+E0LkWa zsl?`@+;K6|7t&f9&qX|ySc2&S1+pAlYd&tQa%JJVb5v`RlwzdWEJC!2A^ZufJ+zPh z+BzzNq!mev%8ZZ4FIw3EM~A`_7PMh~n0Rv)%sLH19_`=6|MTtd5OL5TfaM}`ksz?&}o^omLg z7a6DV_RTSk^1>7$){Ey)yJ;y$C~-##J*n;=P-^VMqYmKy5j8XZ!USdwe%7BKld(Ob$Yk0@sf!khH)$!bHSVzdGz~*n zlNY0{Z1B+cF zAtp-kQQtn?>5M~d#B#JJJD{10tY1n@Xep;FcjI&&)mO=OKIV$)CM)C7pC5|u>;Tnrbg^|mj#tF;f|iPB{Utb6 z5RJ6;W=L42i~8M8=#KP2YrqB+Zd%08Wf9tTuEU|#Cdgi@gEaFw$g$C*I@3p)!y=S8 zE>a3C$&3nZu`UYMSmU4#6`2*)n3*n8E%cGG$OH$Ln5js%GE(+ZASQ8e#WKX08e!L* zxdaofq?Qhq*#ZSIi4X%rBraZ}@?#!<`H?W2uhf_~RhJLdm)Cc?@T7fo`$h{}|MGL$ zg;+~T@;ggKzf8RNgD&ml0u>IjTKP9(F%5X%7`A`^J#_!K{}ZN;xDjODUqSYBNK2Bn zYEAlyN2%-=kiB}n1|MIGBI~0XJBhc?X(y#dOxedtWg*|Z>c{JseR%(Nh=0%#f^QV> zUmnG)2d#K_uNfb2HQ?R(3e`_|j<#Yb(+6ECv>NF?m^d7a<0X-pDvdH$x_r|r_ow(WHr(kxadZ&WfXzpgUATXS{3FC)7aI$PC&esIsQUfh#LpW|8 ziO2o!bhRR>lK8`gcs@dlc&rGoCQ9&fyb!NO3sk%uIjlf7qsX50%aN*VsGRn)RDGS~ z$Yv7$GfDqvqlIdb#X=4ycK9LwA-x`VIx7bN>#sBzmGglIk^m7mkE(LEgrN$ak_rmYp#&S5h_m+N0QI z37WP$Qk^eHp1nD8R~aLJwJDN}XJNmU77i}b<^O{PmAM)AFVdqTn@`21i$g0csNPMG zWU50|rlnxE&x&B9txR30v6cd|v?Ue_WEsnC6v)I@YE+pPcF)z=OR<>&I=YClSV)lR zsVRYAcYreXC25>0;xbwXorjS}HdtAQOOTV5Y4= zX7_i73?nT2yKfc9G>Ysi$i4_sV45CFx&QGeOWw91u$=Mn1wros*c}`zJdU?-2dTxjj}V7<$)?cCN}F7)!3=SJ8(S97e@kD6DpR)F1`LPfo|o=W-`Z<&LJJ;oSFS*=vr=^{6rtMJCf>TODyU9a=Qwfa5Ea!wa|s0D$+ zgBz$~HeoE^ov`1I(^RJCYr-I#mfWIJlIr~jy|PUk!9^&&9HHv^3@=*EK`DmKR&``j ze(|iIitW?NrIcShp-K|~N(qK2IkBr!PbOs@qQYdt?e%s-jP_FUVv?g1klpG?#J%2R z1+wd{dsU9CH+>_@_gJAd)=nw16V-cgz9|&b1aWihTGWNvVlb0RI&ZtGAsnraKu=*H z21~=xk-1BK{*wiJakVi6gE_%S+G2^qKu2WyEJyr$swXESRP3-rOOP}6uhhi>TS94# z2~y2}M8Qhhep<#7=f!C7c0fWWT{YRYN8#mkE|;*lVPZKtfEye=gM+VJ7x+ z4;7lfmL8(btr4hY2*0_y*gabxKHtoT`=90#WEw^0{k<6gSJxH%f%4)yXniig=8b?pB4P zSDW{$ZP%uAw_zyRRZX%e+hT!IXEWri(7_@8V;8UC6?lanvKGtLcP_G)%*UbS+PvcG zP>n4h>s!S!7inhG^YkrOGlIy^YcAOIu2yRd1E{sQD-*%xZTTp*O)+flRFB z*>W#jsPZMms6rd};C4$eZZ!wtYQr9!tK3G&yW?243kEV>6wpQwd15@@7pKYsaHTN@ zcc_?T9FTxYtxghPF9{-v7sq6^QUf!Y6f2ee&jt?T`2aySK!{PDsk$;+(kH|DYH>j9 zs#N*Qs_7M~CJ9YqUv_}nN06n_S|%%qi6VQ{mx5dEG3ZPYwY3Q)euQ_Dqk`8&880|h zemF^s+?DE#BeC}ANOs0Z{tnz9&cdnYShVNv#86o{hKj-z$VPHQsk*k{TGIhsZpz^I z+=DEyWjMTT1rE4apg+zV2UhDN%a)(9jW!Ng^Fp$m_pRp9I#MA!FGaZiUy!xR1Rc9w z(CF@fG%7B!kfOd)Oy}dkLVctPz)a?0pP4AI`G_}~r=XQ+tgAvG7OgK3<556Hl_n#6 zWa>qz&K%V!F3J87DzAX~gxDOauz4C~CTdJT7HMLEAZ;VU%ouy-8p4;#%kwWtohpoRAf3>@n3bZ{J-d8$#4Fm zKz6)c>d3x=>{nrfH*ZaOT*9DK{mB|1-fX~&yGeL`_XzFfH7c`fw2de6>d7cA=W(?F z@a%pMp4{!ghnItd*f2iQX1==Df)_UkF~*y-Ww_U$p{nuw_Iuz+j5GSvyfIBRcDy8t z|J>oU60SIs;fqV1RDYLRRE4=Th>w@~;X>11T&xenSdI_I4tlB`z-3TkxvMn}+Z*A~ zD%!^7dMH_AhJ0HCWG>Ri!G-fR30?v&p9(F1l^&{G7NT^$DGD77sp52Sc&)CgH4~Ug z!EC{Lsn9o66Emb>RyqJ`y{%Bk5Vcn7%#&q<4oaQoE0C4D=%C)qRJ9^CZnr=am0Km1 zTdDH`DgqredD60a>MM}tJAaS5-NxvSwN(j!$&;Na^Thc|A6%{9g&R$KaI+~8*Bb(< z%mP$gsrM()cBmCjv73GA>y?EQXiOLF#O3-(+-^(2Jpo!zI-#YRIQwEaM-znD^8txm zJnzrL)1!HxVJ1^A1ZGeA^Hs@)YE$YtfSXi$*P7$0v=UWQyR4Q9#O@y5hdaGuFZbcm zK$-&C<9;4{k};6whMqJRl z6!>GfG*syBwVgbMN6z34s5nWPqYW>wynYbW!lJHsfP^f z+1PLKBMvRqMvCz_>f%)>Gx(PoBTkB24Sz(<=G7>6T%uIhegaHDmbHkMkpN33pyZfh zqJ>101&AZa5{z^RGCf35mF?A?`w3)Ph~#quGc|*ZkB4eYU70S!5J803o>}u$?3gu2 zCHi;I)k3hYA$HBy#*QDgHEQe+a}>mUlo~UjD*L3yK0!=@>`z(>Wb1!NHTFAN%YV>i z=)wN)v|;yOwG_x~|BDWm{_olZ*|*U9->Jx?{NnxBrtyCiA3utz(5)m$Kg=grciXH??OqqGujXCR2#eEVza8~m$oFameR&^t|l1c zxxVO6-hxW$sq|ckVi!xb#D0+f%$ZBHXfaHXyHuZ7>IF!*n5#m7CaYB?_NFLVXO28x z(Q{U6@v6?RTQ(cnD`-DgExsy?`wp;ECvYBWK$E_58%mBskw9AWlqs7URO^kT3`O}>zpCg}*c z-kOZt1eZYUYSSm{N=tdWQ((s11emBXIX)gt$K9SJ1+s@nQ+a{%Mq9EIiuYJ6s7a!K ztaQ7I(PCfP&P`~Hl!X8{OqKYlk{X#F+f(3&iRvf?vLh+HKt*pwQ^Y1@xi3bp&oYeW z2J`Qbful*jDDzo~ghl+kRvW6Cu*}8tXcuQuS$(5a_#s;=YsW%2LYwu@IeE%34Yd znMBZn*$CI=>kSPNyg(ZPv**L_$GHk*VlQ{iS%3hlvTfflfajlQ!|nI8vGsSeG-{0D z`K=y2zR^Hz24rF_UH&kip#_)U>kwuH*>82I#x%B4K(_L~YGe6-*1@v>tOuLF`wn{l z`TzVCWPdF*5R3nM8rJsF1Kst`u$uqBAlSnWomIK`@I>t8b*irm`1s-^p5Gn7 z<6B*L{kVr}Y(N9DTa9>ju?o-5mErcl0Zf$zsg@#9V=|JuFVzSA`*)x{*&Ef7(g^H= z{=>m|I97x=r)qG$cfXo;Ar<`svXit^qR86zI-=Zn5sJ53AjjSSsS9UepY%tkm;gglP=0O$>a-uAN%i-=P(Ne>*lN16|bL< z5~sN+-8fIRGPUlpL|^O*^v18mXyyhSFL1+&LU)`g_raywUAS1YTS4qj%U;}Xi^1I^ zk+{_oj+@P43TW4xg7`W=oGA8ExwEd6HL9Ril-gvz2TqjkP$e6e8=`T87Y$KrciIzi zmvFk*u@4Wr2(+GTJn7Xmj^FFZ!mT6w)#kx!|IPYXTyII>&x*%Q9&fcJ(Yk6BnF3k& zC!q28ppTDrCn}(cG8@hJK}&)I3U^y#vWN<@Y&Uuixud_p6O$FYFm~7%RkH6v$Z`xH z@=+;+iJEX6$@ayuGHFu_qILE|W4H_ILS$DfX9cs`a48@T#?`81w1!aeZC;23tM6$S zXY+HNg)CmgiX3?HTB)lpQaQH#{B894xf&pisyt(f0sl7$Dbu+~v(Qo?+iyloYN3mq zMMga8D`l2yDy0{Mnz<3utu2sXqEThBCYp(`qR0{~4V1l`}HZVl!0v&|R z(Skn}nI!zBzfu%gpte4?|Dg35WS)PT_gRsB39>DJS^(ES%j%^zHvN7+HvLgsfy{~4 z((&&Ivft=xY~_ERkCn8P06JftQWeIccLZ6i~rzTP#Uxe&57GFU7d`V({*?{QGttX>1uZ* z*?~xA-A@(-U?{@})d8zezReZ|o2`*fySPuR#iIFCRi?;UVTSZit5I?#PG78}cFf6L zC05b|#ZKnPUu(pp87ekf5HuzzcQ!}8+Y;2dFHr@x)$R*vBNw4!s}-#!?|WLSoxUZ9 zR=R;&ghoX(r{-jNC5pV=xpx zbr{aHBx1NI5Ettb z)$Z_>{tmQ~=16qXM;1SW>Ocpa$P34Xf@mB|*oM3f)@n<)JSyy}&5KdyY>7i_bkVcN z3Dqvk2s2||qTXl5lpkaHfiAZ5 zw*Pz$$UOe20huKE1!BJ6X>6r{%=J&SleChX|FA&Crr&ERkZt^(HrD;U7D1+`Le$ub z|7|W-2*f^tZ23R@2>t)^-(jj z0loVp(UB5DdlZS`%sBM!i@=e%04j?xUXf#|ybj~#L_V0Q24px}BgxJX@q|>2jSk|M5ojxo5n;9fVf?3z%VM4ki%`Q8qRwq8n!Hw`d7B*?x2;00w=HUEZyL6*K%KXZ zS{<#~YRRu72pzN(%nE1J7Xem6s0rvKi9#Ym>b&vT=SO>{?Fs~~GETHhenU=9u}HdTeO`=uCmv6&j>6Fh%5)tVs^%*}aQMi=A_1 z<KffVuo`0i1s~AM1ZR9~=H& z8%}?(3;Vy(!Jnp75V8lk{yR_= z8-ZhmxwzC^!++pnbY~>tNMaP~B7#sAv>TOyJ5aXU2PL~aP_*3x`97P`5G9+4@aqmG zVWKb%)5ZH4=~Nr>=t>I2L{2=8?GHy=)OHkkJ0fY786p-fK>P|?3a2Hg+O}CmgP#YQ z1Km;O>x2Rsb4-ZkJ6j>w(HI9;=^}%+GTTm1EfnOhHN+u11LUrjguf-qTo$98fGgdy z2$k+OsPhq!EmI1uW~()-wwNnWNdvmHI*FAmBFqY%7NEdETScKGmD)O8l&;f58I?uF z27LuK$+5|6MZHN+XRF_048}O%e2zEn*V9JU(pt7g;9*z1Qetawk!}A2oi}) zm7%y=6M-A`F}T?fi(8FxDg_teCf}f(fzRw2gbz=DZCFPACmtuC~YPAykhR>_FZA&8U=7;3fWQ!mJF~ zoGghzKfhPD=Rzbo%txW8j2WkL_FblOXQNpWRBgT}-0ptfejJp^bQ z6Kwi${rxO#{nLDcOLAlS8i@T_A8vorqavGu8I>7B@?-1%e!fy;>wZg+{YIZ*h_!#K z_g6ut{r{c;nGZoGDWR_*Q=#dv{1wRFcqouLY5f*%I!4$!&jOo%FvR9LhS+Aj6j62? zk>=)u?Cm>{wQUN3D(H82BqcOX2;$R#G<3rFB&Bwxapfh3{1{3!1HQP|LZ7s4LO_8yNSK5`@NVlDj z1FN)=v&I0@Se#3kW!uq$t}(`8M{^XcXE^f&qJ6FMSc)1?DzZ-?tM^z)^+w=16MTeO z!8#drtqG|~6L6KUrwU_K5@1zSWD-i5ZO~B)PJnipQQ$;X=ez**KIZ6;T8nG6gEy#V z?lni@VMiPubtmG{(Ii#o@MJI*_j&tae+nKAq^idr@cD;b2?~6Vx~18i!28tFbgNx< zY>HG+lhw^@P0_gC9D}QkQMgvWm(YqPG~+eui*{0!mA=ks0>?;sp24v6!}w; zX|{uFJG330c{?#qWhlEK$ws@!%VO00vGP5(IP7VTd=E1m_FjZ?KRYx;Y(aYhFMxi| zDBbReTo)^wWx6;>gQ zh)_9a#6r$MBQ?<7Xmmj5oO8}O=SZ@fq(oAra3$5C<|Tb3wsJ!|cY zYEoh5{q{WXhyJjCw@_6m6sqq1pS8}}dmmcPLnR69PJ~R6ZHq;)E0w}(uQK-wu{h6b zO%#{8!?c)j16ltBw}DKGOe#zv(g;qIY68z5(u3A1&WWN}KSPo?Nq5Kla2I58NElAq#F51$4QM3ZfGBsFJ-GuGa zyRfmY5j)#DaAejT9GTsRy&YZH*V&0PbLZkRA$MW^0^C@-1UGs6cvlCuRFq?LwhY@U zve-~ogq@95*h`ol>}X;%;COcn&i1u)RPM&b{toM@eyAl&E6LHZxq>5dD{js0z|H64YU}{uJ_SS%r3{J?joF<9ygFFPB#&7wSJsb z4q79BCe%*xzO#JJ70sp1EXK9oG}TxMUh6By>wQ#ZGn0f@2p2m141%dENEH^O?F`|1 zd)R;`kST6;hH;&C^hUei=GLyY`*5AVca2mWv;L&B^c5YN96M75Aa``MtEN zR9uYz`Svbb4ESHXt;GPTt{=WnNWRC{;PLOMwEq4}hk4}d6Iwq~*Nv|pvDHecF>BxR z^%K@&NI7gDeE%9gx1|ePYNp`I;xfFa9nVkA#{ic=XutQbt;YALw$$b1_iwDjHwd%u zo?n5loLY!?Pt3D~*e_jLfzKVAhcBMypmTxGzp)Mf>E3>P>-=hbZr2Qa_PX7UkpL)gAcWG`HLX??%h7Kmdny* z=*>%5x5{2^nBXmv6n|N{w-@ zy9sBeQ^8diW1ni_nksOnO*=wYV1IoHU$+~tFQ1Job6at?ry8favN+LRj8pAOa;?Rk z1&q1XxT?{-GlPpAX`G*)#@XhCsWOGx&-x%vHghEJOc7#5gjoi6`^(K*s#&ATn^dQH ztv5>b7N%W{7|663aJhvRl1Bl|Kt`*1z15E^O&(m+VgVn&)a1t1RsxL{>Te2tdcvS7B^3HztgB$qzk@?tEH3{eWzF%KmNA*1$Upqd4clOP+U7dw79m_3*usP9EZyau{Xi@ zRu{&(>afA=T5}QMR+LqWLVn8OCD4Waii)5kG1is9!*6y5DDr~84!P;Ufw4!Qk%GP6ZMFZ7VBeqvku~jwT zP;)22)P~)>y{)Vg`|Fx;ZpJJ^svR3M#n_a|U}HLEyEE^uB$#UW9LB*q!mP0dN9rqZ zyoqpXuBAP!!0s}hNZNBSntArWBb#CRKK+D~Ze9DYKRu{S|lTmf-IEGOGf( zHe1RqVs)FcoY$3$MqnvSiM7#o4uVWj)6W;`3UIN$5LcVMxZdRDV?Jv&q?SXLq)Py* zzuMQgbmGr0ufxB5o**M=e)6p|`04jA;K$!PgMa$&Dg5L2)XL@*{_cAx4Qh&i{@z(W zb_W0O+kEWXCkZzKkjEcU(fz|WPv9TFb<*M=zOH;Tf@(1DEC;fGBBcJFu=)o+X3zP? zas16Uj?z*d!=Dp`e@?(@|A4>w>Pc%8^m|vn{tj&BlH|M9|FeErxW+lTV&m)6jJ?!pi5Y{Q+6?KnEG)Ij#ltDEpm!tJ_tf~UHB zXXkW$Vb2WQSzU|E3(KkgX5foE=iug|I(&9j8?N;7^B-&)aIDH}{l-qz_-)=(b6!f- z*b|>fNQKN&UaF5%jnN{e3vKdWO6+QLiG@}+cSomTU&4j6)hR+RjVq0nI8qeF_CSGw zOo_9ns!MT}=ikB747RGFqQ{2~!3b8l17R$Hq=%X4V#0aul{;cib>c>w*$P!}vojkG!Ap0mjysyZ#EgV6n z*4G5tx9;?!A@2pu3kh5qbWc)ESP;FFqv)L$#cWp`^ZaS7$<$(XvI46TS*(ngTWl<@ z#twn3q8{s$w2@`i2C^+BmDrRnwGB&8QMH|>4c%W|W4q66OeJln=DoC?d&>Eo%2FJz zsle%$2JFk0V1IdruxZ4rbGiwhW*n|6#&$~nEyYw)tyQ)K{$Z_1F|N$2vkCu$JdqF6 zI;u|ZWMdR(d6Hk8p0Npj#pRA-LZ}qiX7F|=6>1J;NuTqu0 zzM#yuo;y#QDJ7-ESxxLqok^Kpr1FyDG8NX~A<%-j(Hy{)daAQVDzYZp%|-_AyV?}O zmF5sGH3q04+&EuPyV()NoAa}HZ*`*q?e9LfA0K@49De#8l^+pC1k*o!R{%Rps0nTi z-p+;Y%f*kr?Ep=H`^WE`#{d4#8T|8a^LM{}%3ka5zI+V-_%#CY8-yJJX2IJzkp0D1 z4pNOB!e4ytD1NBF{q3_>)2U?JD+6U5e5T;MEcKFVe0k3-ys=?At`1b-8sm*s&G`1g zMflFi71n=Fs_Q@B+l%jB-H6vVcH+dmGHayx_OZpb+3p*=yK#A0Io{vfh0ktj#>IJQ zn=kv`iN*NV!37+sH~`Jf^6$m**~PWA=u}oM{LZMv&el_XHAJkU<3!ej!^MTT*;jW-X=2R(pcZJXt{yi>5gsQ@4v*7MR$dw%S}K;mpBiUGF*7fMIfU6le+FyQHQ1hQ#>S#rtc;dneWnsy%j>bJ zqzda2rC6UTHJI(HtR<`}2(B#lRMz2eV>6XkEx}ceEvXbXC*#yg(IKXrC@nu?d{oi}OEUT7|!PXFvYs+o$nw z-#d?g`R-Z#+wWX3IORa~FTcb4fA@kx?1$f?()t+eq}qP`{qy+O@0~N4nNs`4DJyHz zYyR(VIdD@5WU{IP;otCeoL!x0U#a5$hAQsE-@Ao(w{~Jr*(BO^{?AmB-`YPHU)(Vh zmw5Z~>|$K&r}`bJ!IyXU;|CYl;}33b!ynzZZECG7q@lcYrE&*BCYA)%Z)_@nUA)z5IchT*b{Z*R9OnA%Q;BZ zlv9zpur*kKb*@R+o1#Un<=?9+$If`dtfds$`asmml2&tN_rUrm=gk6`7={YnYE0j6Uxt`qri{Eh<}Ga_>xmJ{!BAtxG6!PH@Yg0JKb~vWvS#wLw2+zmAnO?ILHC3ZW=@IO9(=viLYU`{VJU6q z+H@7x7u8Uml~bLSVO_eyK(;=U#fG9Rwh&}HtLqGATT9C=w7tA`o;g%g&BfqZB$paIIWSk zGJ^AMCA5##R9|I00jbW)eYnKY`DQo4)m@2ubL#NgY##fo@mhZs)m|l`M6fZg&B*X| zg1FX26*iL)V<@NW)&3G%OSS%~!RJ=g(ym4c)R-x=y9;>#;w)H)%MSX+}{yO|MEK*4Q&7W`{yhKGQsXX^aw)L zYN|$4uc7$g1lm9IcV$DRFbxpWfU=l^dkB%j5q~ zd%1o(-rv}PTMIZS%r3!gs;A2w1a2&Y_}1wa)&b?~`v>q<#@9})!23s+ z;G4YvTc?-do5$wkwDwY1S&a+*NxaSh&)c(b1aQEwLe zi>6_3dK!*q`589Et+GQl@^nSWQZ6plr*XVAKv+$}&hRu-V9NTxP?xce7&}7Ku+cRU z2a;5FRi*sBVjL|_5Nv*I@=Y_C?axFRF`TKd#-3CfD+}EQvQ6OxR=7h}nxv2#lPXiO z_#A?34hMe=IvS;3Sn@0FWH*(V)L83qM~$_N45Ddx5Oq{!H81&4{ep{8V9IP}UMU(! zhEO+dGK$B2lGd{Cfg=0W_&CVuxiv@jul;5%E5<*GdBK!pEeS9cwswsRQ<oO(SQl7>3aw;-HY+Jb|_OsYoUSc+KR~e-| zLm=D5QBkqCB8>x8MYehBfvOC46h|!fW(BhhPBfI_P(>1lvq_xb&u94a<@QQij;v+- zA1vX?+CbMJt}>WuL*NUY{5#6}pPj(#^NX$ET#Ey_+_G1DlDO4D)zZq_ zRC@QiQ+TyKhC6Kp6&2a_#+ZTZRB1lWmAi1UQi{z@(D`w--m#yTn*F?p-29(;fwmHS z-C$D}t{?Vm1{5+^&s4TDdrt$WQMto^=7v5Z6 zZ^iwZW4ua`-C9tI+shiL!kR2@Gu~P~9bequhp!Q0UpzQ~uN+y7FCXHOs_t`}rsLk~ zdYtGE;WjPmTPqv!`am__SXhsnGs{dtAFJ?K;{bt7t*iyI!=+wJqfnmM!IX!{HJWGVI*`J4UI&p+zC`-R9}6X8ylyUN+(o`q$Jqx(Gmu} zK})H2J;A}c${?y=^xg+q``9?0PX(Grg;6_pl7Y;28vkGc-P40PvX8~D2brv8cH9$~ z?T=H|rqRO@rHfyLT8&sxE_Y96O!1;ud-ZwaSQ;a|sKnM6Rbg$0KueVv%vL4R2D9}= z#n@O<%FvPOtBfkEv*=@H zQ5?d~B0p_Kj3;#h`!WHJ%$h4H!j-lPTxy~UtBCRhB)BSKIA2SKq z8C+^h+US0zD}#&eNnGws8py79r>Wkee4Vg``kD!9vYMJ`etmug?k%jq+skWleO40Z zJ7{e>39er4eOZP#2C_D%rdm#G9YmXWr8$6W%|Y6oI9~70Slr>?zDtnaXo?!hPM72x z$Szg5aHcGe_R}*6Ge!#)VyjX;obDak0`F8iK|3dj&u?zSf4jL6|N8aQ1~kok{mXC5 zLY}4aI&T2WK}{f2=(Z`iL71tF#y<;Gnj`z>QR{f2l}o`)Ve@U@AmF}w-0CyGe_{Zi z<>zp@$#3`CAl-}A{C1n`_P+*?MlEp5PC zn`aQlOY!Za%kcKr9(-ZPY`n3i1-F*e;DqdTF9(~xEY43)+I;4v)-?`r4AU!OTvU0zsss5j`K0K_Bmah!SQV3euvm& zB|P8aL2K=EARWa2b;rbtmiedaH^N^D!^j86oo+6PdhoA zF^dAAXN(gw#t>vYT3w~BR0?8#vz4aAUi72t1sw^qm)w{!r3ka~%TPPihsu%TkRJUT z&Sd{j=HWpbpI->4JM4Xs4bG8$`_-8Q*;D9oQ+-WMp=)Av5M)mG$~Jm@Z6ew=iK7c) zHme|ng`o`Aq$;tYxEkw=E3mGpoYqnbErXTu6dz0Tu@VMPgrW>K7Nx1qGE`+n*j|>r z4>Cb)V}hd{PoSNpJb8GcNtH>3Z6~ZYC%xE~@?le~z(97owg?9@DgyT5Ag#iQ3R<_; z3S4Q)+G>=_Q8fArXcuWSv|6S45%qA_N|$B&Qyraacb8YBd#_<2u{K-)rzd`v+)3Ur@T; zo*=}MJf;j}I?7tgYD$eM&X(une1-G#rCK+x)O&GFb8Lj6UPEoX&nfj|2BFp)!|RJH z@O!5gy%AsEI}>lrEhV7+&USoV4$STn@Sh`u?oo*e`nTtn;X0ppv9H+T3O_gH z>1nR(JQc83Bj4XX+d%fY4Lx{!V=wN~N`7`-CthFHjMo-5;O?SkzCJB}UmY$qD~F8V zd69?enyRa{)V||gkvtsZ0C!TGi6m$rIk=rHi`#u?DpGd8tmMfozbl?2g4!t#l1Iy8 z)(Jx}JER@PBTk>PLj>0r+DgrjX~*$BMG2>Hoagbz5C`r&H-Ao=DwD08H?a`Q3Zjg- zfov{qq}13i>eUR}(`o^ohC>irOy6OMBrX;NeuePYN?v<3swhQuj zH##T!sLnjLOY&S-6iY%ySP_#F)7)5vDY6x@B$kI_SRG3^`D4YU*hH9ZNF}i`700%c z6jfN#tmT$;#1z>Uo=97Ga&1kA%uXJr#XMHa6P94pHut*-F6|DzE#@*scC4HuE`jIt zU=I>Hw26e-+1iZtrrHtB;|b}uKJC}0SKwAxjqR*+c{=S6RhR&#$$j0v)mv{>IGS$)uMOPyV44x4JbGpCeMjJKE8;%RE;5$cF;CD`Mz}F8g$7^e5;8-`G zyQl@PE$iU#H{i7a!mPav7x}&2m{Ds@0(K_~ajm5srz;cKpY&K~3&BgRdX5%x0Lo@) zD{0-U2~rM*O0PIab$_xvVacz8*rC#hflTeLcgF(Q>?^1$L#2iij{1$OJKMY9er5VO(#C8O&}_xtThvmjX%HYNj&(-(6CRH~Pyg zO+#~Nf|za#Zf`HD#%-#S+^$Z7nBrm`;X@eR?u;{%xJ!7x#`ocDn&N;?7F4iPTyLR0 zCAb8z8;ybcag+C-sZ>3oiz+guem4j9#U`-XN%#=v0%78z+y9NL8;tG6oj}%$4CHZO-WaZT< zEk#W#?@*bk65>{G%H|ZcecuHtwu{}e#2if8_*wDuR=(aP{_nRJHR8*=2JpQT8}OY| zoAJec%W-}|Gd7faakxzzCO6@&Ir(>HqSag>A7Cf_83)3xSG%f#Ombm2fe zfc-H)j%tEF7R1f~6?rm*bCsI-&lHN*|A353;Y^>_T$bXVB%MotzYRKsJ%;j3Dct5=ZAGDzpiH+f-Ej#=Dj5$1iX$ zW%UAg5-UQ*gcVg;ssgJc87%d2r1FKaieLKrcn0fYX{-*%EbU@PaR%Em&T(@hMtBiq zYAvji5RQajx0QD`oxeXAQeBrCRWqnOH07VsS`ug%s|s9oNA;fCH9wun0lW5x7Ro0ch4`w zH+J{pbF|f$n_X5&uf0NV_NQPScV{wss5I3Tgb-7&H`!m!C*JHy;??dX?oo-|WZarl zfxAmuaC2c3t}brFJ3AKPYezO%e0J+X+#b1hDzG_Rzj~D2aF;)#^(Y##+}DY$p74`*1dmL**Q36G5!=d9cdk#Y&ggT3QQa%L}}gg0Ufx!t(qe z7EJOn0<@VS^oOFMk5R|NeZ-?El$M9!&OsECewf2kAa&Ex&fV*A!U?znu1o{NU;J zwclRnL_v)9a+3Dn^PAmNX0kR;m^meae#+{3g>gcw2&<{e*2T)OQgaBNu*IrS92*iv z*q9{f;wjrkYil}d}A?fViMQ8oR!Nfnx~@b zy4p^))s?}kykGFTN!VR)RE`%F8R2%O%11jz8`VL@Aq7WBeQrS|-X5s3+%JLbb~mje zq4HX98lPWSjk~sC3IWIaWF@aO2F)5?kmal?AgqFRaog&q=IQtxCCA!6oehFt(3ITS zssfy@oJMt#XK}fbHnh^2Q@d27RXZ@cXr{wy|w{AII|F6-O*{VI#o5v zHa}KQovI$Rqq`N>s}9u^nC8!D(Pt*`>O9)WSt(omu+L&fiqB8u-jXKV8fe1#zG}R& zp%1rL_u|dX3-JEVWq5!4QbKt(zP*19?k?@6>TAV;nl#>8G8-rAO0dbFN41;95uPKv zBR)%;*yb&?*d6lmSb)6|Kh9QA*%4y0m7Bd2t!0lCy(aVbQ{~%!mQ-E>**f=BY^23J zR#}4MRi)U?!F83Zz!G6qV<}5HcS4?{$~Z``52dlZFoJm#JeGQ~a4PNPL|V#`KC_iG z?t_e?U^p$~u$Y0YX;_rd3ZrUB5Eai+jXh6by%0jpOHN{J#dC#ryK!U;)uW~$r0y5* z(N_Ls5kCB&cJR9Wb(h*ECKv02W-Tu(nYNA=uQ`DWH6dt|6Kz2!i)5V``m}peh0TfC<|b5Y zO0{^srwDJ&$>OaARhFV~vd&E~5n7!Y-0e(T*8imj7tRqr=c=i&sPwM!@7-)o*$z<` z_7yih^As7LXF~8C72x^lLHy4Cx%j8I z58_|HauWaiHLXfgb$$DkDYBpZ;G#iIAp3`Jp2FXKUFA#y+G(rJl$}%o`d_@e%OLib zZ*IZ=&=!3c7vj4Idhpi#Qk*>a>m?ru&IFc>H#$b>z^Uz-Mcl~N%U4Vfp zF0AlIv6h4NG8f@C(L*cgVtB0ISl39eGr@23ViB}ZX*E-UwGO4d9GRdZ3p1jqq8h6d z$QX4m(N>O1TH$!rvu?BwiyQ2Uhm3~**+G!~+rkGR`*=9}Sqfy5sWr|7;*SULl^eZ? zz4RGOpB6yN*f5$#I{WOkkLRfJOCXy*Laj*nrD>UYLJ%`KBF(2VTk4m^%wVxELWl+L zgKSMSWpiX3lNkfqmZ$?VLCk>}6&InjIp(vuu-!!w>?d>%YyK;n;LqC8#*Ix8w}EV1 z$d9c-pT%w}xx=NJ+ejM71h0d|v=3z=0*tRmkZB_KKsshCQ<_iHK8MQozSxkooqBRx z?h9n+YG@Vf!#GpnWl)LLMR*M0Sg~sJ0?x{22i4k4ZPv?+cor3j)J9XlChD~^d6)L- zjd>Ne1Jqe6tK(HJ0*98BfYNi6`L8)JLF{am$NtuNJ}!7(ZFHb^vn^pNPKxYIRUR+M z0;|=OQoLGA6{IqqFe#!mPa?tz4=X z+r7cwZRb=(uT@NS*`4i#a_(d;rOXt1OrM>0w|aeUC2rGVs(;+2o-!O)L4SJ@uJ_f@ zCO6@;D`w#OyhdvZaBJxdytjQNzJ6d6-r2AiyQ|Y!NoBRSI%BoCcHR(Z2a4j>%6cyc zIpv6*uTfLQfF;8!4Mz(=T9wp<{`QEPESBJ~7M-F2tatPNbOHx5X&wo>Oc6F|+czq* z4FSR~62+oCZNy8k`KZ={bR8~rfOQ+l)CE?3$CNK7kXbMO5dv7)f!R=XfsGJcUer*5 zRXpo6nCZ5GY((6dLwk-w;+3e~Up!>&1Cafn!U36X3uOFY20`|vYcmje;Zsy(ezc5< zqEXq$qXL+&?W!ik%vx&BOk2Ba8Ch*eWHD8C(KFG9zG-1B@Im+lT>q05gY zz5rH+qgWHuTv-b1ctRM=WHIBK8;f8A!L)&Z+DQAjopx~tVYWxT)(IzpY)^3*+Y)>{ z?85eNfEGa+*qXdmZJf6Ia(YM!W||w@m2g>Fh86%cCnAt(=Nz4|2U8(ihF1$0<(H`r z??g6WT@wVVbK1d&aiY}4@DMPBUU?8lGj7|O%vr?@T29wZst*;HYko|&@j79qjQ%?_ zl2mMjoGl2%39tF$*@jQxi&O8>P+wxW`FZ}!t8U~@ZYJ%{_Cxk_~WZf@rS1u;0w!Z4P=)I zRjIPq`TuK2cPTP~Ov+2Zy4_zy+gUugTa^PeJtn(-p1-SdqdR>SxYAvWy913lRv)!E zPEcQ)nZ@UpcHp&vR$QK0hl{ftso2_ZYf&%0zH1%6v3or(_qF3lOC?UVH()EFwIR;) zf&3KB^f;(e(XGmx!a+}iUyA2b z0{e@Kc`jwFSbQ_j-|fki?KD0x&5dPLWI2${Cdhim7GmajuVwNpXG|b#AIa-vIIojI zkTnrj4eB*Ukk!7Zo?|{*$RHYCi4j_~k}o^$eCmb-?C~r?SMtI*1fS1Y%LQ~#59Y}3 z$483Hv6dePS$N1N(ZnxCmfH0?=_vN6_!?m!_S3!| zDGJ*Lt|zlmUX%$!jjE|sTg#~pOq42!a4YfQ812ZJY=j^S^XC9gmGL5^YSU&WYAa)^ zjEY2){91L)<$T?s)x1iWNs(!f0D(`*uV>2$8$$DdcrFdTDIR-SxW?Be#HEvuaC{8!<_VfVWTi=R5 zyRp$00aOiOeaO_hM{{QcnkB;$Wa>#KkXh@WFYYJ!_TjJI-GTpcZzKNf)iwAp*O%ju z&n?3H%WC+!O)-#Nw>d$otae)AK}B}4BSbh+wf4ju6-I~&YDyed4xFkLl%J=(J(Y@G z>PXX~H*sJnvmM2c66~sxz1UI0&rsU|Hsbc&R;spoTr68uX z3#qZT;e^wmwQL})>R#}p`dP0jFirM142z<9coNk^{02F7i`8=~p7o&YX%EU@o`}ec z|Ly_EetoE^;;(}2%h!8Nk=2hYK)sfLhk9(DtVv0H+68&MCjT9f$#N=5cDm*S#;ds8 zZy@W-^J76Fm6tO_|GTdR}|o*aVN210FZD1cRdw}EUkN69U5 zKUEn)RuaR0f=pq#WE@GglC&ipv|VjB`$E_j zc}jH5fovy7-@UXVsJqr!O!d+n z$4%v}2}0R?TqrNVd4lYGDSs~Y;xb`+t0sfjo6B*hnf8l7yGo#4%KC7zoFFTA;Sxcn zssO?8csbQy1Hsthr^0dJ-l9tU>BY79$9E6mZ{OZykow{K2duH8RxOp?|HCiwF{-g2 zefc2%<_mg!AO7aOUHD&bZNY!Py8(Z4V>$ld^n6;&N*vCNx0P6%7v%pYg=G~D?XyADSmrlqxFWn)?J3z`x^+uG)~brA0wdEb4>NJ zXPYy)+FgxnJ#~0}UI$LMR^n_&4bF8p;{2=@eB>wI}JE?1S~WSP@vOw$tUT=_OlA&4E%mUGY}012?Qg)XejFR)_q z?QyjZs^P#|f`O@dR9yuepo2W8lUPiU&6&*epCIcR?Xr5x4i5gERAU{(gP1-vXb@|B zk)Rp`S=BQhT1q9s`Y9CRXdaoc70XsF3{1%IF)zxVDnQvYE>sPljMyvx-dVMLP;2?i z;ebq;{U3fv!V6^d-wwz=Ly);pJ0f6;tYNs1AmgZ#1KFgAqt3?gXTnTSQ}%xjWV5FR zsK8=a=ynvDtmR^N0870AtO#fYlNK`&8H|v{YO1SMelI~ryBHy)v~emSqg*ntXd$h%go;ie({j74#1X!RRM{>nKDBDmD%XCF#%iQ@ zN_Css*fr_Jal-0MMI5KIF$33Os=9-5500h@Gum6-ca9gBKz6P%Xk|?*F2BR0l-T(i zDylkyL*WQc2d3UG5>`!m6!hbrm0G}JE z;2es??CHGvbywY>C1I*+qU9muaoPu)N*cENLIh zH|I9dqL<=K9S0GD>?AF;j;fW_j!9>m2%`2%T%jU6z(L^j^eP-{ug1aYmAEj_jW@Th zz?Tnh$CnRm!|$FuiaU$vVpEdmhf*>UF&s}OajGPP3-vXGRw-eXhmBqr))Y*$dDcCN zxGDQxbO|e`DOm6I*#^BwE34@avRLM#BAe{Of_yp;LTsQQYTLXy-7S2!Gg3PT z|Mp>YFUkvhg_e;Jt5?TYsxE=7<~g6)ODVFJQAso^C4=^}V_eEWmLtwu?e?IxHu2d7xR*|98b0xhN{ z`vovf1|P879QBLiI8{ztp}h}NRAscIrwAE=>u{3yMF}`6L|GH5GtHSvm7P_dnUZ9C zG6pg!GC}MjtKC7&VoLgPDih>u`f#q8DlY3cn7!7L zz}=Q4?$pO|h4-CK%eT4Kb*@6QlLs*F)$o3~BkeT)gU|Or0NJm`FQ#7@$o_Q!-n-HT@6*45hVgFHkBXpy9$yXKnnpy> zJc{rd8*=i?#zst`sqnSYQZzhPP~JN^NLA*?{DKhX<@+%&&xiT>4#<{MIjvN8O)9eG zp1^&OY0g0*Ri;?sbz@_UprW!;PT9^(#O69=FL$Y_B5mg;TG7pXEvd3~+P0n`)9RA! zrIyZ>p?$p4ne^Z2pJd0Q*|@D%N}Z`dcqf4=m`Rx(A^6mf>To(}WiHy>RSN8gY$?^) z!HDN0knz3?)iGNXP-DN#)04JmrmW?y=~N<3S}Z8Qnc4!IGdiQ7<NjHkGRDVp+g|c9ja`F74EtZ6&x>o4_UA&k)Sc6?t%0^L9m4S|tP~ zpMR~Aimsa0vo?y`byRdzX4h*8KEmvLR=H-hm^D;P)dEP+^16Qa=sf)8oh^9DJIz}D^*cLk(*J+nU5`J#vK(Jp*=UL^XDxGz%s{5OK`Jsq zOA1U76U?N@WOGk95W>x2Txubx+tau=uK{=GHsU0e;aacdMSK-KvdYtWR!-ctBRAh7T<<0AGZ-B~7 z(-(#LW*?81m74lmTUdbQQzjeaG~c=}mB!9U0vp_ZteBEdMK%rd$4KQBy}#W8nU)LQjulD}(|g4YQ_*76eF%nQC>0GZ~;WF1SM$g}#&mQe{) zX7xiOm@&DG!XS$5a~_m4YKKR8Ef(4?O26~&oChHL)o>DGKO9WIun9z3%P(H1>!v1?Tc&t=nf7K%woslpC}o#?ictiY`%zt>LLqGVFokfMtcNdEO@XH0%hv z4Q7Xx&CS>oabbVlOMubR5SjwnftcGAnc^tb+Zigg^VulvWr#{g9ZJKNBzwCnWviB& zBRgM91yRRnq7rJ=JXH`^T6n>?rSL|3#wP1e7Q1mcHWlZ}{CwR42WSMZZ1ZITnBXNs4Xg}{?P&a&8s``KW}WpU)|k~AHBU7fAyA9F1F*(-`r~RVt@YTW&@dye|&Q# z{^ZIE>wa-CHJ+d;v}Tan*+?o&t&g;*agLVL{^yPuZuM$aSDi(YRu!SgRBx#yviz_;i6j+#h^nm6Vk?!F=2~|~ zlGqlEVI9xed1EGE+0+88^M zT7E&9{ZwTS+W34t1TuBNsKn3tp;#aAUjkXpaDI^dP*pO~JTlG?nWMuPjw}q_r^@}> zSLpkPNs$FCB}3h0XHsVO8_2>0Si~kp7Z%WN5@gGKVFzYBF$6M&)Y)yXf0=y@?tKr0&puM(i~YcVWWv{!b}&qI%?dgqZOnDyxp9{wYmt7CZ|%B z@dAzKo83H0$R4MaJwsrhPV;wZV=t9chC&xnoCjAk!S$*$hEd)0 z72PfVo!473c#SGYzpF(7t#m5YLzM$ZDyP~!)(`g2#Xr8W7e9Jq5B~ej4fx^b_TbO& zZpQz5iwf+GO$M{vQ6T#-S6AZmi)(SDNE>~44P>vrwHD)AcNUkmy<0tjRp~REd8CA&4}qYLnfQ{0;=OQ#DDPs!!u|Q!!38l~M&);8+8dS7SMjwNw#iop^2092{${#d-~L z37$(-?;CmEEt@>WY^2Sz4$ir5dcQdQ3Pmi%u+612%?5ctomufj6lmiqs>Kp1~S!H=4vgK$zS!7 z1GXvxu=3?FDo5pgv>n{P&7tTJ#2$dm;^%~zA_p?tEAJ-+*|nJj*?&L{N1IyON!5A@ zTKa$+Mnq{h`K62BvgP&<+w$kd3jM_XX!MKHG@;;dd0WP+J;%B*CGHglCfiq(M_ zgI1F#kYa5(Vx>zP<4$Z!#H?&-XK@01%QM(lk;dL^%53J&RMfVy-xlHX2ItDQ(6Vli z#yE0DXajuMLra<~S5n6WHC$8;raETGTB?j?Uo>c0;78IN{Y%q0L~!nlcnPnNEz=*S zT9d6jOckgQ%udjDUZ_Y|UYXh|YX_fO-L!z6yqIasuVgug7;<+g}jxHsC9R_dfV ztXnk^Dy+C!Oew3ANvg4g8z&RIUxbEnW{{S0#bB0Xge>{o}E!{TzP@P>?Gf(a@>Az|2+J| zy*>D=SGVGS+}emge{B=~`m;Nz&IXfVUt5R&dS?y(^Y!KUqf5*1?xGr6%W+msaFt3^ zT|6}ZCYY%arNDiygTU^|*h0t+6^Xa1j4NcHiE3K~GVL>}6pJ?(wd4Bi2JEc}QC%f* zxucxFlO3$O;6OtFD~=Fi`w8rQ=>pqa_i(A-b`Dp&CiS2@o{ia*!m+9pj@MG5)e(+7 z9;hq9rP0qh9JO@XZ~@L;{mZz^oFFG^(=H;8R?^BgS*V+{x6mH8p8 z;_c-;uJ)#^UC+$1vY6UfBxsrZ)9FsyhAOD6UiP5jMGvhcgMg|fsH&dvq4H_3P4e4n zq(DYxCTNvw@}JOZpv}zEj!KbbX-CV4gpeIE)wY9k6xm$->}L;FEeFGa*slZG7q0ex z1Ty+_Z4lbXW8;XpflLbkwnY^^y`q-UI4oo>d$o$$IX2|<_@^q9#hja`xw4?G@Cas3 z1h9xFjy5=5>Z0W=)MlqXvzY?gYN{$hZCxZ{HJDqH1XPBAVyL~3=FQX}O4d?pY&Cy> zWxkshQ`XX%^k3(76KE=5a*D|J5C|$Bm$lrV4%qzIc5Q|4_t|lOEJQ_?!hvWADs9=r z$5nj1PxENBp$7@ZLs7ql)R{o0oU)TtKC(d9JBo0vjjA9^n3Uz=jA|jNI<9vTAYD`) z)2U2aQ@B$b$4y?Wn$P+iFVkyR+8fPj0QkA6!|2KRCC@YD{-W zM&fLh3zr)LrpgprP*C~S{~cs8v*X(FU3-h3ZB66Vxh=T6umgLtL8`I{PBqegx0l%p zrY8QiXXUXh2bEF}cBk^J)aXbVl`{WtW$X)NI;wHvQ8iCgnOb=Q2RZnuIp!uHi29asclgqn`s*WPY^1ERgwZm9kbA(kA!=RAID_49n&x+)NC-Oi=OhQa)ZY zG~s}ZDlYRx0m_~y$X*PiVq`u7L$vwG0^q0f@WBVVh97{8@qY(d;p6|FAfpT(8b-}4 zK?i08nL;Y9ZkUsitUMTHA2$xwF3Dlr)=H&I*599BbS@QR4yCy!|E0_vbr!&Y<(By^ zG=FAbBZP7wTch4j1ldM{Of7!YuS}tpOy!wv2>5JNy$`ZHFGo*5*1Cc=Z>Id8%~V{< z)>c8V3WQZCY~3=HXiM8Fi0vc{w|U&y6Vl{5#1 z^|j*;)dMZgS%U0FCok4^^}JGMzS{NB!qH~k=`O;nz2&r(G2CoS;LXNj+|I^vx2_1c z`5LcLDZD`&bX{Fa!)~0>931WINvgk-2|vydWM|aTl=k>k%1z~#k7KcEIGgt30x#Sv z6;a%*rFGPPjg?WHDWPKIMShZM<#-8I9*?;=Umn2Kniy_1rg614LW`_!w0v%s&n1v# z|Gu+p7XJS3Zv4eJ7M*~LZp!?TO<4nejzJQ}AfTu{$8)rsC{ zOW;(M+tMnOAEqLFwMM$#Q*3HgWnFqqajME|^{v`m_fmTaUYpm7cbCt?LH-Zh(uLSh zKpm^0Vk3MN+EM&4-~YZMH$hfl3R|5_6o*SfR$HqI4(m&&#sMWU>@QI!K4DcFhxUBf zPM95Ut;Ut!cFWRVJbnt{rHy*a4Pu+TbObKKYP<`prt&<>k7K<%g>|kp&#N?+&}l3f z&vTjQw?Ni2%8TC70rXFl)r=En>TvPV+?Z^o<&5z(9S5OY?%TX;@10T07-<1HUk%?dQtjQ6~v=z)C zZ6?2X+Dr##VGOvW&H`pJ6@u83!G!=N%C4j2Ur&oDd#QFm>RGnKdYAEJEaJ$SQe7r3 zK$IhBkfSH<>N+=1LN9;EM_a%Xay`|ZZ03%LI%R~cu1@V)l$N1-%RPkTPQPGAa1nfa zXiJZ#GuY3+y~9Jmd3j%u7lGezaUkSCO~)g&pJ%fP%Qrig4cSGeRW^a_Vr|Ga646|l z3eRtM731}uEUq>uEQ$5KjvBn%REc{vgj-PzZ#Goo`vZOW#_TR!p=G{6h@GM`I}veH zrTH9?4TjX2;#A6uW05?Zj2GH!r|jkBsu(WU#A!VfxWqV3%X+HZXD~ZjREVRgd>p4G zJ40)BfvV@aI;>Vu6_wH2mho@VwjRmm<6K(^-`L)b|9NdA{_3^O_>0#!Td}x6_FrzS zG?4wl=>fbwzXJQCV{xoxnso-bPK$WEBTYr7d9t8^Ov+1(AX22V)=IZHSLe6qoUW!F zRv8!v0X0m#HLJlucBZ8i+qLIpF_m-~KMN{Yb%s?A*-91H}r-8Q$%?=VXR+}c0@RvO6GazH(hF2&AB8ry?us?0KvqH7TtPKf{Sp<~;K)(?O4R&&c8JGmJ;JEt zNYcnJqGedrR9VLuewqAoXHVe>H7USQlB}OLlR%>~>o0Ir+1zO!%+GV*j|KUjK~?7D znmP88@;(-`ghr_{wZm2$Y&Bn0ZRW-R!RHBKMLrc+9)D+WK4Ufi#yU5j6I3E(kk6wX ziAM-Aj`m?MPg*tI3u7y-tzt`|AG`cf9E_*1ClDjVg4mSj!Zupf9aM`u3i@Gfc4;Ag_xM~>WC!EpaWFN}6q(f6ole?8!s>i| zz)@wqeYKUgdwRl-0-PXbu(Qq{L7V?l`|7KmRru_pZrq&JjQ!d0eUP1`f;``pp(;z; zZEY^2*qx^BR}C!{*lvCgy9u#<{vK$2})Gvu&NZrsFBSCc* zK^c9&@>_BstK|qHkg1|yEqn#C9)7XfI!<$CUE{sh4qM7hK$F$9IkN&PF#=7inF9oo z;-jQl+DkzyOl1{~5@v)}B0Lxb6OZbev59JIjhjj?&xaMX0-DcQQ;?gWb@I!UTejBY zvfQ%6B^gVWRZ;NnP@E78T5P5z-A*9x3C0O8f~|m-lyKYWFxwFsBt|7?Eai=P2itO{PjrgM#EAd~~ zuEsZJcH_%4T4_6-$4@5;a5m+_`67ah3PT{1%{8~`BXq&9Iq+F zsTQxn?0;ON8oRy*|K;j({3)&FA6{C7-#I!5?=Pyyk<2vgj}L;ZC28}3nsbxA6s!a^ zOM2Dn|$zgj-2;$wTrYt04DRM%rmFo9)L zJXknBpHXN^Z0@jWSUlE)gbPshK$Y#=o^o$Ck zlXkM5(fTs4iRavC;%8gP+4rIEHq{vF1q;r`h4JmVUHEqY47|~l#apdee0F-JCBAAh{%o-er!xgOmdwYQ z5<-dg^;9v{AHj8yYVD*_GZF#XPY(`f!sl)kshfXlL{~ zRF6t7Jyqn!$)wBX)UH%h#c7u*sy3Tf%Tl4072s685AUyP!k?aBf&YGWHU9MKGW_Ai z1^C{*{I1}OntO(>Q4sxmI+nAzu2&A(Yi^~mQOq6)mw zL`V@;_s&tCOH43$F?D1I`C^pjp&VG+zUPiBdI z9C`HRO{cZ&91}O3Tfc zIdz$Ymx{`HQszR704g$Hll7|2#k<#VTL#mTV?Io4e4voyg zAfM;PdfM7`(_FNd1eTBXmFjN&Wd1yr@SEnl4>MUzsWMs2eF55@upi3wKd$V5+B{je zOATt19kGj6wT;Rl6UeSlSMPt?tXf{|v{bJ)B=Blo3b$%fxLz5@tBo1lYc0hM<)o>r zMHPQH>%+-nT1SFKZG>bAkEgvjrt&EQ>I^T&voS3S&~_$yVe$f1dWfZpL0(O+?<}js9~_x) zT`&IQseb&YUDhMU^5jlZYQK`=YdINJ~yoEIaYE8P}n zXupq?6xbY@;(SvIcl+w`{)%3lYbl~4qtYbc4rB?}x;ReOCk$kJOI$d}`}PpfYP@Ot zHxOiknD(RG!vSl5Jj(YK!j2Fj#!&t3HmX?r-jhy4f&*n0w4Y^|H?9B+#(OYtw3p#C zaLpSjkU0?RAL${)Tm~^&N(W*dbPRP_7g()U_KePD@q5tlf|EO@q*oP&=T<45`7x&x zY}vDZ3V{F>nGc!AJroFDUROROc{};In?U2wPlQnPbew=oAT?wf@*bxmdw;Qk%-quh zkmVwm5bIdWoFaSoN-w59^6yamO1}B@5`O5V&vEp4HjI*|0{n2jD4|?d@}5>Mb0E{4 zfI4AzjZGNHwCj>UrcN36K{iQsm=4HP+F<}=%$r6Duicudf~3e~F9kErm93yPG?;N@ z&4EmIa}Dobtt47nK;`%dWXq?7uxbjQ%h&#OAk&Dvza(xz+s)V5sAhRoV~XvxkWyru z^Qhvcc(G}+12P9hQ?xpK%|kIat(y<(Wp=qSW)@ScfTwDm6+BIZ zD~Iel?WbxfZ}Y+w#BLBAcbiHLV)xq1@!IraTvlFMZP+H@)eG%(sT5hjAauT*%7>s) z;rM0#?d$0jP7(}SctM|u25_E`yTtc*GDKK~3viw)=5lqCwljhY zv}dX$I2_Kyv6vER`FFDkTqut_>MvD@lZ4r^a@x##58ho~hyQ$hA^zypLi}KVpMmT! z6_pg((V~3oo+~w`29&2Ny!JVmB4b#pMI9}24OLl{&*B_a-0^Y(O><;aW$JJti}}S> zvv8#|OM6JWOiO&YN*mD7!t*mb)sQ5>s7m=cXfj_do^l{l`*W-22>VQp?F=iT|3{Fi zW^zwS4HisrVcu9;N1m(m=|UEc4I0FB92gTYxXoqs6Icpa$?lvQ@NtQe(>r!sSx}ST>o@Cp5KmzLxfNE!EU|mk%4g z9-Hu2_fT2OJ+vMNwO@cQfQ>%I6@noDJqiP5{-7!v-QBBpxaji9F7qH@TGr`uxpjuNdmy%LtA#YSkk!A2&Ln&Ts zD#4xR61>`0!sjKZhCEba1PG63%W2apLIxh?n_bNkh}jgb#3FdDs2KOMS-e_SidQSj zaVeF+nFt|9>wS@M({rv;ot)$QI}s?rVgFQIE>GYpA$pqt6&P)fEm~m7xT+>lH;zjc zNh&{&GoMDAd7{E?Wkp|J*M{Feya3Rd58Y3;1l-BpULf}j$}%6SbbYKBD6@N$BY;_aBFW0X)FXxc^~ldaS-`j7{)M*@gG z>__N{ahUw@ptbzTLg!k205XL@R?K4wLtQX(tCmaf&ZU`{@aaz={Zc;C&jyitN+X3M zcQa4_>|Wzz{qjpabL zQuAPzSN2O0p!y=nG||6wipos zH%KcgYw5;T{_P#!7&Z}t8~OWNc-%@rn#H8D6U+p%U2ZA>f^QcgcrY5r0V+i$&+g?# zq|ITE(ej+BjyMUN6$BDhhba`QF{!RE&Thol=eFaW_IkY8T!m{D1X^7YuGJ>3(c*Qb z8dL@uev1=DYOd(95+oIiU!@|`%I2*^6n8Tje6xKzUM))Fo88?67w_kN7YX_ERI3;L zK3t84@p^d?UM3f};^Cz*NvWa!8#Wju+Y@ zfxvS->oS}9?vi?ZeQg(Bol%PY$;kx9SPK<)tBC$$ohH%=-g-iep~?JnRG|vpua@E} z20uaTthz}plqiMeNLKB7VmRH9!QK8gTx`n{T45ZkPFS3%O%bLgc3Wu|+mmYZ#P5Qk z6bo%ivpLM~G3c{y7Ha9_lpLwuQvjQ(ptn$^ZXxj0B1+wf4^}l`6~FWOP>TF%HnUO)l~kNK-M!ZgYGdID@n2}{-;$W z9z^*Q9+VPNy50Cv9Q8xugQ|=+ldi|y4q=vljEd|r4;2|f_NWihN4y9=F&Yye(yFCe zUC(#gZan~*LLkfVD41ofCz*llr%Unf;P2!gDiun^2ljS*yvETqf=7Mk#1 z;_*Ah<%2L=O-q*p*;+x)<;SvVUM!hRm<>WqA*kg*rsPx&X*VQisY-CF3yoQa1n;cR?+Q7=JPfj7G= z2Vq8#m1|CH8m{p7Z`UPpjjHTsHim0dBClnVc(*ExFE-TUb~1stt1EFMp1_?{nvWIX zP9lYC{G9HjlK6aG4ZhG)j|;R`msK%9^(Bj{IWdI_)emVS58qTA4A7!R39sTX&X&+7 z(q>vI79n-AQq2%UxHqc;ug@sQt@a|^>#Z;wd91Y1RMzFDr2Wqhz^KM@Aw|Vd&wRBO zKPhWVb*0RFl@@9L1eKC0KkQ0J6<+U~j&n`rINzMb>G~3jGgPmq>WXcmU#pZ#vDl%O z=nMmyHXorP)8dX6dGy^YVS2rvDx05$_Jr6KQ#qJU*TU(4Gh){+J)(r^aFu71;xj z{Yv~I$bSCw3WBVLAX`q5%^}Es1IZzUh(8%b;&F}=PjIw&DufJwmemxb z1~V0v3uXp1o}eoVeONNp!=M_QLR&B?M35;6D88OD{Z)hM6q0ikC&=~|CvmW}7>A0= ztT1>j72P`iz0CyaX4%mR9Ig2tH%{U2@cl`d$!6{(Eb69h_2FQ#*VKlJo0ZFTnIMt^x>6Chq}Q)?Ove|S8t{d-27GgNC*EqQq-_-J z(zw-}F^DNnQjw{&=w3?+)mR9(l*wNb#*IW6Uv93$`*qcLhd_IyvD~fTAw)$F09GA=D2C|bXIxh>;@@A~$>R`A4ducyaxGu1r zFN;}mycRM9Gc6Km)l-xCTBW_(l)^jnn(%s0CH51z2Wf}30%<{YseKUCW%o>Flwc;v zst7rym+-dIR@7enC?TrMeC@5EvLfwOsy#}twAbN!S0gU9)!;-;G0rq)t#S0+WK)k~?eWy%xd2`Ock1DZjNk1Z#Fw9B(VwrolSODBi1WFmn!(T`Pp zErCo;7oEOkv=w2(Cq-*QE2eC26$T4r>kIfCf@}k!x@x?Ks*Kijyw{GKc!F=HLfg*Q z+e;g=+ZV$QkLod_1~TQE-LC=&`K)_}w(NI`nAJ;*R*LH5d=(*5n>LW0PXut27u7x5 zTUo=ecC_HNs$$%!aTJ>>0Imprs);OhTS~@N%@akY;u_V>(@jM(#Q*}`t9xwIaH5GJIIevCdJ>Ff|YF7Gag%2mH2{2mgqa}W; zeN@u$af0_G;iSfuC(4rieL_=7zFDf{B%jC6YY)|xnqI1lul6fFP!uD`nsJu@qf#qQ z)|cCsfG29pajLNb`)J9x^Y@gouh1$E^Mva!=Ng+(4a@99SB=Xb@jPh$InY3 z+n24z;i^U|GEMk<2(vKej;14+5XHPPe)Ns@TFe>er=1MgDrNgnj}?bYiK$hOCi&HK zOlqu^029R2bF5)V*g9Qg>1IkFDMaxj1qQR~XQK_Ju0Wln{aJ{?3cf42ED zDzc(yqI5oSq+gtB=@*tq_5frb53N{gevCl-Fl%`!AN;hIAX|<1uFS`{-}()tUhpFE zWW-iZ6sadTN<7IUzl7v7{1S%vQ2M;bCj6z!RBx%`arG_}#MD)`c??w@Jq zl$d4wt9)rTA))A_`sttMC^K8ZBv|^Vx-pMRE7!wJHJDOnxmG{gxI`dZ?GD>y?EpvA z#rzv)4aWH}FxGAJWXkYY`I4G1YHvc>i>=Wpw#VZ*n90(9%32a+gy=@bTE3T+<2+c$ z<=X_#Ca*>%6$H(puf7LV2|)fiF>|y*>7-Xx9nREA<&GhCfZELy;WR&g{=bJa`fTC^Btc1~Wa$&M zzq<$}<%1n1d~eN|j*~Uzmf(82p%NF{8gaF|1&3=(v5hd_L;$K!-97?Rd!pK|;4T+d z{gM>~d`7*eKdZhR`}Jc)zZ)`Qrqxm>D@?0rjD|v%EmdWOq==67#||QsLTdIX6kI3vy!P) zjJeaim_N;D%1o=61~b|@!A$+j)&!$iR!C)5$j7M0wCc2o7S@)~M-zgh)b-N=nd&Y# z(f-L=Z00B|h^b|94rD7Pda;_%UB~yZno4fP7%$dLpylLittG@Z@O3v*Np9x*+g=#M zb{AiVO3%_YLJ6w|P`#!DGAgsMkLpFe&Rp1+aN|gZs)P#Yc-n8N4Y%t`aksh*pDixK z7s_k!owg3Voz3DdFYvE)Hsf<`)n+l(O!2x(j0WwcY9iI);xa?4o+=u*Ha=86H>q}R zQ^`oBySosy)*_y(Me*YKC2ttDOU?h+4v4Aj9=T#R$;x=eqs8*e3%8uGK zN=5N1ZxYCKR4=eYMQT0mw)=EELAZW-%`AL*?HsC`ur)?JS(hS+3a}?qfc;Sq4p5~E z@_Ut(91UYvD1aRSA9hnA>*rkTqgvV(4Ot4sjxa%^4Ppr7i!BW}P?jN#JUCKWiWBvf zI8;-D?Nnj{nL47Vi?H@YUGMi}Efw6T2(Lj*E0tQM>=+S1$EdLFj$|OyKu(7uh_$>N zNBs+7R6P?w&2u4BU(<(|@I0?a<11+cnvMclh9FZmfWT!|Qd2mDnbI$cpN^V%NIn%s z^7*Nl`Z%qn6xjoi{c_M!{!Ad#W}nTb$bSAWOYzR7K8*Y1zeo7lX^3f#>?ztwd3D0f zf}=<2OHmZR5JcIF0aR#9E7g>#9Ak*rdMwpYYS#|+p<$#SP3r4UWu{e3gBeehPRe$5 z$8c&f1GbW>{4yysC;SF9W&7tc{WWKntHoUDi(pB<4@(Iufo$PKpD8k}ItgU+M;Br# zRn*Enztvn?Uw>_`s+^)&0y`5K>`!K~atdEhD^~pd)%<s>BYy z?v6knb_bo7NIQLA?C|+{Ux1&R6T4{ll(@Q^U~wX7k8kq2u*FBE>{bVp01lOv&|=ox zw7~MhJRGbjHbu6(JZTV9M-)L!X%*^-qW=0T^1WCx#f@bgtQJ#o>3mrqj+>gdI$kv; zNEcyGwjOh*_|P}jv5?9Y6U6!msyU-M;Est9WKv^6%+PB5%e0omdV`OTU=`0$SEb?Y%t{_gz~3D$PivdgY(ZyfK5`VrJnL3&fgWp z5|2epNW`C?f+>#)WQz&1MYNU=Ci{OOe)fUp$W(w@PmuA$`M1UR{FT`l`&*wt`jshZ zHiYhRL5AO=he}9`0D_s+SswwDThYv=WN6MT*Cj)FW{arUme7hWnnY_!<>ah5DVfo+ zmW#&IUJ^KJ>tmafFa)zL5j9>+S*L?#6Ft8IvXx^4RAd~n39=l_)=$#pf7oEAMSyja zc~S81Z*e;oQ$^?7sTQqkhTmr}lQOd{=OW563t&HQ9}IbMj<)J1FU;GSQrsp`uY_Z` zQ(A<3H5K?0Ez_&D#kkj8Mp&f{VCq((w2bovNe*i2Oe<@5k`_}L`Kre}Phei+g)E4@ zPD^%`HtTXaj5Aa$w`*w`XQIblk z4Ew8!u!~C6U>2itri#;dyjH8x8UQEp`{lW$sfYQKTv+3eVM8=&l_JVbT$e}@hIO`L z-ap=N6Z*4xzV>hs)=|l?TBQ`oWGA&(rKMZE?6q<{0ZbrM2UzvtuYPtg)q*h6B)&n5 z5KBCikK!l1Hvg4;xWLjYN_Z{V$|OV6H4+QDz63LYOo_0OM?-W)VML#ugvpP70>AS< zt>sS_J^!{3R?kJDd%?V^H z2pjcUSCN5}0ex9baJ(Eb_6fdSr zsT3|37cr8!L@TK5deuh0)>>x$#m=kE4wabp22eKsS^lgzNmX`{j~}9nQofg|uHrZ@ z6QFOF72_+-4Y)z|^4YoyYZY{j%H?VqpH~{gg<`&rN~@wl9HEUn9P#52p?fIo!Qr^a z0B2UXL}?=g8r4-UT|x^NT8$ORG=YDZ&^uM1!R4-MoNh12UaGh4d|V(qToSQ`51Ths z>WkaU&&;W!P`b+oem9%)Y1yf&RUWpD%6TW1w!pTXz}rmlZ3|Ha2RK-Sc^^NwV^vkS z(AH`o+fP-tkLq?0|2J#xlpxGhgUjDle>zPo2xQB79xa;eHIS`RzcGSrLn3XP;H-_M zv8S>TD|{Kuoj@nR?^}6dy*zJc^1PivSoNrz1<&2i;R0EBu-DkfK^8GvS^2aZ*(cow zvEs*EJgR%LHrO z%w$Y@L?ByYN$Vf{TrTPX$eghGG2N~*m?;HAP21kR+G#R2`od_0pPGX3n@cg1TICBvSpQHdc_;WC&(z%2@M?(li{HDPdNb|JvABTgY`1 z6f+1Bb<3DFHA;~2BvST2kGVwvDKksaFsm8HQV$_i5TYUrn;M%t#;KE2U0nZ2H=*Xm z!f`Hwj1VI9HV`=Lyg?hOrOY-4VpMBXaeU570!n2~1~I~L$#Aa&Gpa`?sL%#smb01b z`2IHX{cPs@*uwWCo4GlUK|7<)8EXHt)y<=amdYP6HKH2LgS>c7gcCSS)u5_?)5R&O zBmNxoQCTH$wv1Meajrb#^cACZR9~@^WweE~l2T%tt5OAlc1J%~k;L7$8Ux|$RC#v^ zMWtQ5Q&EAd1m#zzx8hE=1m_b$oTDl{6D9Zvv2)1?js|HJX|<2giXEV0I!NWD8coH1 zrC~6R$ZBR|zmWTNxQKAl4(>6kxg?cmh6*Z13(5C&Z&?q1_wYs>q}A2Rqg1KVQd9*Y z#kzq2Tc78#bQcW<8~Oci%A@5c(3Hccc}EQnT145#&uCqN%XT)>it}nJG{NjdT`kTM z)B@R_Y|1A3Z4ZZ-GY4voHVgcw#+OX=T36R)RQii)AD8pHTC3^}+WJ*g=Bpz~>?o_n za(@QB9QM<5Ecqt-OXHsC{hujD~;z96X9tpMhQxQaIFLgUYutgsWBlJ*^KL-(hdJ-l+ z{0V&jJzC2LAp4~l1esPX6?WfG=iqCv&qQVZ3uxs@RW~t)a?0$?5EoS$-ulTIhk2+*Hng33o|4!Ps?nx2!OpVxfa=ErY zYWX9W&CLtgil*h64Z>`R6xATe=8g4Hg%N0@97VQ}Heu0tp2P&%TEa%FSF1QmYb8t7 z08(k1Lt8l7g=HLx6-!6?Efx>+7|d4kq+UUwtr+Da%zUV*%n@;O3zSRAkCdAbP=l>U=QuoVP6z`d9iJ$LQ|o$Z6utcDoO`&Afft7+QF=& zz637iaH(Kib5#mWz@MT;Je;P*q$0Upm!++Y;&v*HH%rR!&E_^-r$u``U4nOOYH>Lp z!}(YUx66xhy*Po_vPJxvuN9#x45x8C7{g(I5QltJWmHZFg0#bd0_^rr#lC2P?Yyq{ zB%leNN2nOJBCC8kf$Si`yFJa%D>4;d*hK5|wYTv8s=55%LblDGYElKV9UMe96Y`s= zTsQDL+(5W&&W{rOF@xF0JiiSHQfFH|w4kzx`GvO2(Tco$1DQazme&1DQ$3E=SK1y9 zf|&L>-4f9pXvjdehOe=V;95L^-zC4R#gmk#!|#@VV>wm*)>J80N8?x)q-{-SvBZ#D-Wk$O>!21UXy}9EC6&XRM?wx{}Rxp(yyNa+|OGRc| zcoq7vjJ8JA08(j-38eWW3JEg-&4)$9dD4&M$v@0%Fk3+zyle!2hmnKXDq7gpsNG7XxZOiVL91j+jp{%uZOb%TO@eN}J7V>k>b|jwc1~qA zds9>`v`1Ry+@JKAWfZWqdYH45R~nrO_!DJ*o4-1pjpHa`aV+Y?rJ{sWZ<#5=7aAII zGm*rdG$B`1gsaH}-l%o@pWQ6Y;PcJ3xK~q!8zos>E-J^_WEv;6i#FfSK|*4Gz-yg7 zv`@jVKt6Vd3kP>!=ie@k;25E%Jh>e{J{F=%iny^QMm1Moj0?T>SQVXyJM-G9n#ys2 z|C4rfw|x<4x200eT26M`K(Kx))hrd$`e}sLBz~@hk3P$dRA`$BeTAAIs$O3rg@Dx$>q^U+=$R-h9B|M>4Y7a5nuwD|6xDepDaM&VXr~V`zbHHpYg%>#KZ?6 z`#;6c89)8GR2e^z4{0wypep-GKmPFjMOa$v!;a1_>}v1F-syeV+d2zdD?6|vT4CF~ z2{ctN7ZPf2DzZWpF^Zq(ZAQ@x9+dI~$nY`iFiV(eB~u%c>dT-0N|YyrN}8NX0L_~T zY66+kGgJXEgAnTCiLU--GbZr_qYdffiK#wjYMGr&pzWU&bXJ=PnLb+8**qE5sbImx z5a#neYB4~25NZ@&D!W0oq?C=-g;C5Io^So9R#0^=9Tz6ZycihjCdB+$Hk{8RY?lus z#CUtv$N&`@?;9NGO4pI zyr|WoVSg%)eYAReqs~g_UfRrkaqSAER@GWHj9Egh=EVfEOZ7>M^VKP5Cv@#pPOzLW zj^aWQpHJ(k_B|Ifahy$1-Nm)4S%h0v1WhJ_Yb6QXt}4TsWE5AkWw>6M#hIcM4u?ZH z6p5I6QYy(V!b0Iw1KILK* z;GNZdIM-2uOYPOz$KTuN$;VE@a$~-W7Sls`X>O9i&v6x1lXCdh=riO|KW{9IW3xM9 zt*6&g`L3GE?}EQ4+o(-ub|f=YX3aR!SdZ56>aB~HA6v6h)Q($Izd6%E*4T!ppCYAo`XQ$@wlNYzsLq6;O@7odayD|?Y& zvsyWu|6~)2Vu#ZW%tanKNk%1TsN% zetwJ=Gmb^BB<2z#Hc2}^U?7`0!ow3#`9K_fc~LBL#jwhkz;cezO4V3FwX~A2v79G) z-_QcHOyele+k%;(ww1t@O4~feb022gs7f|bVQ5l&PuST%K&c0N2n}bS%@B`194#S~ zXz7&dAedRp>TJ-Uru#G@uX!wmCg`=|s78;cO9(K+Lx4L@`*)UVN}yAhS#4~h!tmpX zAORL*B%nPA)b&>FiBxW-R1!<_4H0ToIodYQHZdj$m6d;jFg#OMOtm?Uu*tXXt4At} z@%n;Zys>;1_SD93sjmT_T{9c+u9<@~E#+1Vxs_^9|FjT3eL+D5z2%2xWEB-h9ND51hCrZvnylgrfSp#EgglF2oxZ&s3uEBbH{5!%Ka z%!2&c_h|y`(;oOgLyP%o0_;=4`yd zVgK=5eD`KInkGJtKB|T}Q^KZt7V?5!RhY(>a2XDk)#G$SD~?sy;ZRi__LS9PU9=Sa zQ)3*dD5;;$N6AwJ+LP)e8$kAjuBSnCUJ zCpb8_sS7gi&+U$+e*C!>J<1m=p%N=1s4@gq*;734pN(25PfY1ck;i;C{}r_MJV6UV zOskUunE_0S?3Y01d29kkeex6d&bx~rfb5q;eaNK9)L2p05+76=$bN8ZCc35!;R%t% zmS83JL~D7{R?}uwVSAt)J0fM+moCTgY&p(WSL1S18!olZz_FSRY>C%m{?uaIe4*sA zsn#7+EwR&&Yo(^Z=FhYTfEEMlUsh&x0<9wxrpjb9+sCRIqtnN%eT>KY{VQQsAX5c^ z^2_G(gqFRWN9Chko|XHf&IAIPRGG4|=Mir6d2wh#Krma#i$;^Z%c+nwccujarwb?{ zJqWV-gw_BpgCM3@%+WU&zXG$79#dpeVyhc@v4(0=mQ&p{HW132r_d7d z{i|W4Eet4S!xgZ(BL`|h%X;5M1*DRl1M2!Z2(wca0+}=6exfpFB|zE=O&f6>W2l3~ z{)`s~(_RCcY8+3N@i8hiDYw(IsjBm=O5y~eX10_n?O2AEF%_d#j1p#H?Dq3LP?0HB zLhngQtXthKZ1EKE`*)d@)Fl3~OxhMK)c-2 z7jLg!fN$?wj|15v+Irf{NCN8$orRK|B3n7hZxFMXKqbu30?bN+NE?8xo*KbQeuhe5 zR;bVZ>cR+Cx%gaK#O+1JI6<4ar=rp-KbG=-TL|KJA&}+Hjoy(i%pTA0(VN16m$p;N zFja;5RQH`cA7mkWM#KzaZ7)!L4I#)FEidp$kO^X{sg$dz9pY?21X zJV-v|Mky6o_PH3!pO2%6>P#sWW+!DMA9diR(CTF5u?VeYgfI&m&>W~qp@klR?EhB? zWFLH}4M_BX5M~0|zs$iOzS@sv{&Bn@YH&Q>hO^1(xLDMQ^NeE&o-ENy>ps<~o2nLlj<=X$u&x@jea@a{?= zgbyoeUj?rmwAS+PDWO)!k1I6UPpxt~T{ZkxfWCf$3+pDiv0;iE8)-MSAfN|^KpN%hl7k00$Oh4S}8XHO{(o! zF`t_j=&0;yJ&(~|9xqPfNIH(aRAf?yN?a9OofHx&N8NT|vnvlf{BGNwT_r_oPPy6d z!)kXS2BuBI?;qcf|9a^--dHsc?{8m;FYj21R~OI1+p8C1U$%tGezL6`Z}P{eviSM% zdlbZ$Pw+ZwjH*lkTQV+)<2(lRFd!jZ)GOr+o4t}Rvne5WGh8$?y2rESk zl~*pB=qehYry66}&fy;endZgPk9Y|&FA|@j8+kf{3PLQa7V*zUtdopDCWuLqDYYW< z2qDG@KN>cW1$a9LvcN+j!Ym9QpZCkw@~02x$UX{zOq2chL8dvff0~0oeswO^ho|9a zvIZyo%{cC=#t~N)4tuI`FkH_Iss$&jr*qWj|SjZ*B26k~5H%L}RjXBs+jwz&sK zYrC*MR*jyqsymyC^rI7zdUOhk9v`%wRBGBnUb`?^X@};~MyMT-AB|K!ts}gcPMg?8 zUyylM#VF3Z!Pk_yN(To0GJ%RcA%6Eg#fa};0K0)TwMkfivFpWL2m^Cq6WL9Kf_&mX!6fJgPcR3@f~Zo1cR~whAX2rxRv%Sm}-t zW)Yh&oyG6Gm!N9r_ol9{s`FjwO=6y#po~^veqoXA5Uws3?Hp8FUlhbRpz_%ALJ-Xi zK}@TZf|w@wbDQoebH9XYEc2)jsfT?I$Qb3%#8FCHS@K+zAd6W82CYc?gZ6`sd-Js|4IVwHTQGKOsu4I@8v#1p3 zjUezCbB2caGZh`J#2lW;^ZEA`QfCWZ_F2q(kyey3pTDP=`(i#8k93=YSWYl4qg_!f zQF;ay-`dGhf{ynQb}D(2dRsw-snt%EJSm04DSMLbbgZXVIhEzEP}+vtZ*LVyRGY}q zUYz@qG3-w{8x5;_YOWphfvnm;^YIct_7)Rj3M#UFRAal7ZXBR8J6OWU`LlN8R{t;M zuBnVjtC0fafrM60otj6dR48PT%ZJk>{icFKQ*4J4N$ig$39^KBVqNR?VtJtp%e`*& zPo0Dt^Jd{cojQX5dhsOw`_=P!ZQ*<@m^O_AOFmUp9IFb#1~Scit)NO>N~mie$($M! z$ka1G*K%5`%L?_HTh0MYdo!qQlRCQ!W-EP!RskQ^doHTP{;DQyPgi1y5|Q+^bwHj)sFf5u0M`H|%9(x;+GJ?^Yjs;5}$>6j@pgBW4u`=l2^+D6Al z`b~K`FbkNSl&!Q7$R3;g3m|)-$UYW7gVdP%lGX6Y59Q~ymjAW@e|W2p3T8NV6c%Im zq$=#0MAem7i9Oyr?2I;HYjG1cmA7GgRWCM|bYXS85lj4KSmG_hia-fg1v5N>QrMQN z!oKn*oM`C5v4&aLoNBafvS~fn`FeBo98K(x zNm7x;&_@L}^F^vOf~@~#0_+t6aL{Jvpf>*{uZ2{aV%|^}21XE4vOJp4(Yy;GwTQ4% zg}@rVw^h7fv2Ie-YB!a>p(+8@ZwhGYt|6G+FMXnNR36$ET480mtNr$77p4^!@fj<%8C%9D%)R9n^+OW(WvU<&1m31UtyB`xK1 zA(TC>EfF0{nNnsxA(jJKg7z`>IPKzRTozifOjDt0K1|?}l@!PXH2v)3?|d9&W+y)t zgy*+H@M@my0m%OEA(-Vr_H!w+f9c16dTkyS`zB($uMFF!RbwX=+5SK?_9i;9H9Z|` zOPjH_x)WO%J7$X2_M-SG_z}|`u z+K)0TzSZhx*;9qK3v=m{1sv6;8O+q6v4%FUbySQ%QxyO~Ha>!0p1@LOJv`ZG5=>HK zGkJ2WJAuV0UO=O1CB{TCm#Rz)0J5E0(VRaqYF!O_U-n|g5GpbPYyOBhX1?G@*E25k z4xt+3-<3KO*bHV2vz#2I1+{s!n1Y&)b9ph$ALix-=QRr?+p~m!Zz(UhReY~&CdROC zassRQd8{O8SMdMUQ8k=8ssu_&wmF4nK`XqG7uV)|+O>k1l|U&m)Ux0U{n#j&cmmi; z3nk!a*Py*cw2TCktmc7YsxroY-nTbNm{D=RF=LnYxV_9O{1 zzLs|2R)O~RVA%eS{^mBn_WtDGC&V@u_-yMu70Dlp7h#v?@(9*lkpwnT2`!&iX!Bp| zXiL|Hw8-MY;zC+*T2k92hEQJPCcr##vxX~_24Ug15S$iKJv;kKYEMb3rC$mGZLvVc zfkJbgO0TfWj!FET$r{`|*2!WCA-OJ8iUSpG*ujB!VO|Qo{9Vn1HSxP^A;@OtMbORP zQLS&^v?9w5tD`e$mZf|thQ{aV4xW<|Bgl07#R%$NjG_AZFe;x7+YU%2Qe)OZnFP@wftBJVjp~1N|4c3Dg{Hu;~xy*k3Y8r%M&h~tm(nw%uF0gcH>CNEF7rn z$JWYOSeBiRf$|nCC~iexq7nVk1}sXqVRcD2R;4?zG~9rN-YP6~S74E=3n~po9nmY?yI3Q!hBaE1- ztZgc=C&)I_R;r{(^^tXf3CznPJ3oyi`pgfT=^P z_8zs};HS}MPm?_)$O$oL6_U59OczsS3u0PLo=f1&=jW!F$L~!GGdkLRf*L<>)z&WH z0HQ?Kd4!-WWbYU^dPcjb{HczqwAMu`IQTYTW1=1_gH@P4C23O@&6@b95?11MHwTf~ zQ!`d_B<0oeBGuRn5i}51bkguX$H;e9v)&qF*Ch6>G*`92jfMdo>Q(u2wV|8tZNDl)1u#?O96 zMfTJA_`SCVFfTF{o6>b0)ta!{Uyt>%R%|Hk!K#X0%qwff%uGFcV>M`}>S`ybdVQ6c z7p}!Xv>q!`dTuv1lyqWMvIUERHJDRaiatJXt|yBn;X15Hv|u%%*YB!E6K!PnIjXX! z3pu*w@x;it{W8@K$Tl{i3R1$Xx@NSiS32R)JuYmE2ufh=rd8B-_1zp%)vZ9SSFD2p zF9z9(KB+nWUZ*BIOQsz~B{9N_g(H207oo-XwuBd-Zd(wpOGnZg@nY2Nl~j$(318K7 z<`kP^6)m)YrUe2m94NKJRz)ZAHdV{oJSnBH6|1YDdb8JS{k$~ket`DvU^2;w^EQDM zbLPDEM4a5Ty@{|@5bTOl)dgJGNjtfnp=4HV*s(p#+mWzspSE=nWL6?n5HN@;R!^mM zp6ufL@R(}bLR%@-W+0pFvCv)#YiNztePUHUK{j}M>0~#SPx9Kz<7&c8wU8>@U%{WX zji1z*S}^G|?H^8<@q1MCQ~ktJ#DdbPsD2O$M!oVJ=I$?jp>(sMdQXCI?H70%#)08iqtsOHer=qeD=G z#AmcKc#wlFLw&{wF_j-_9!xe;Ad65*g+A>kyqsFe+{C_CDq~L&WKYswJ{~8`V)sFo zo8%Y7+@EpMEfhg1v`_NBPX^$6*h#;5kP!PTq1sC2kU9HWe(+%hKKOw5{kR|Beswll z3x;EkCyAL;OVBg92(t^bm>(mQ2&j1#?U+ND^+xN^6R1Kr;ne9aK}SIbU5r^Cs<3bs zE$DQt&a_}ztPul&YRslO>&+|0tb%gP^;Yw~IxLMgqmQrMFibf&ZYPnJA&_OM%mgzj zGv%47Ylh~{+8JGhnt_ZE=q4bn%?e@GBULs+b0T4$)C3TZ+PX`RwLR}a+jBm2(;m!v zIf>pEJ_4DJcAM5>h7=otrRXI{dtabpV+ddl#GLzPQfu_7G zsWd4gXFqwJ`1zHHw|LQCMUR5T(!g{|=;Nw#x zmf)(Q{T#?Nc`rq#jd648YwpOfg#)sXfvk_;^K5>Xvxj<3nJuEtTsAd@fyq2qd0wcT zNb_Lo9X6YTT|XaRke9^rKsh#~8?i0hiIsE_JyQ~xKAz8|60~ZPu~AC_(u!o`3o!#( z4WXspVuDyDk5XZ_JGfFUl&x5u3dCe~R#8*d#t7rUci(!+x6=i#{$z z7UOL~YOwssY$PKGvfR(Il>(XPQ$e^N`K9!W2O!IZCiw-iTn7x=N;O#gU?IMKdp0U3 zK94S*ob4RF8Yjk4KOu&uDaB~>RHB`b>Wb8$!&`|SUp0FDRhSv9!2ColR+KbjO+_o# zls92nrUuJXwOE#{!;*L%<_l(o*34-Yn3b1B_tZ2NQpGKb)MI9T8Cu6CP(eVXX*Dxc zW+hL%t-qOCXy5X- zgL2Up5L63z@d;*vl|m&?iD)y z*~+ID4+Jy^YEGJmjs_tzHM%N)qm-%VC=Z9Wxa zUc?e!wI9N|Ji?n0%e76?VDC zKKnU{EFi3w@f@8`Mb%B)uS8bmfvLz_n}lfkVg9rP1`5+ybWb5r3Nx7J zuQZs=^VOhbOdKW86d?83R1`f~XfVq@>)1@~W-goA$`jT0&LkkFQ_*NUE`?5B)yN5E zT?B`e+6)3lEm)d|c+l{)3(e2+WPd)6t|2_}pN|n>4#+xrvbI0tHJHti%_PVKu^F_K zGlqEYgUo>#0Y{6f3rdP%0pCjwWQv7+PXgEiDmK+_egrgG%P=3O<>7mh)m+Zs6Tp;Y z>wt{Ph1OYJI0lBg22~mFA4|o?aMT$AK&XAZfjVvg!P*K@J!xJ|4Gd)iH@cO^ zA!tRN3Hn&vETkajfGlhPlch8;5oGIKRDJ}Pc57FxQo(kf7aKhUovbGzrhOx=`>rQy zb6$(a7TOA=tmFFpsFfcHVhUTCRI^K}AU!UCt>k-Eg6qm@0$Ui1l{Q1AWmfWI;8Nsn z&*A{n`;v#>Q6c&XeSvJjM7n{Osjgn)pfnugo-JQ&~H9R&`-dO&4}o zOvk2FHI{{BF%wjL96c%h=LV}V5NX65UoF}vm!N*6$~xQ@ss<>3)@_RbwJ-VZ=b1HI z-*g|^X*bj-szb-YP$N9SOi7N~bFlF_7ZsWJKFB(sPoVQz{%xL^9XxS6cz*|hDUfv$ znB7!?3cF2(rqDc^g={ECZdp%VZ1YA$EgvlhGP9TrflLs~DKx=LWl&B^hpGo0z~w@g zbh%bE8G@PG3h8L8oTGiTr?i%|oC^J{)D8!7O2{SP2nc1#E7Vm&^J#*QLM1_hlXjDm z9aOVI>%1x}$>T<^kAMo;V^Ul8TmnnKyOQv78WpPJuE%Bm=c9X!7jyEW=$#hEj44!i zRAY<6S%R#b?jUW7Y{vLv1DWikwrtBOGJ#C-@l{IOb)O)MKjK4(pwhfpfH3lZYB2Xp zE0UH*K_GqFYmu81)8nq+^xX%U1F;|q_`3!CJ;BT+kbR0)^OL`rej!CBkUg-L_oEy? z|IpdfQk#zmVn6>0@29o=#=W_yEPMrXiYf@I7WAjvu%M_5v!m0|;i^GYP#htjEfm1T$x26SWZbqlwneff?;4 z;h+%I)Gtb4(``Yl?%4tcK}Ptr(jEw89YY9Fo}>mbM*GtO8R7RlAxPEL#fw7G$@if9 zx(4UYJ`OU+UQ(3}<7iKnIG=x4Az&@w-|pwdren@dIv~?yv``}=gqP;bLUwc%o1W_| z2&koyz@|k5*-y=(OU#u871WlF^IABW@_hazLTGTFO6p25S~bnZ z+a3pK3Ia_1zSa{?+OSw4lPcTni~d@W>E}h0^0At~v%J7YQgHY@9YP%D+@4A`akCeJL3TYYUM$e=OW=)OTmV|w-3~eP9n!AKQr>xGm zb4=P%WP>Y{f|-t*PM%LA;2x3i64*8HN^c7CpF>0%uf>>@2O#u6NXufPdAvW)o80Nl0Wybe2e^`V^s9MCkcrV^>eW8741 zZnJoruhKl$swsnTqhiy>#L88()Q&u*cR2ZK3NdM=DEMR?`BZfUPmaaNhdzOCe|`Z4$D#*{?Bns_&!xyJdDMr}z#z;% zn2+zhv(P{`P);V0p`2%&VV)9xAb(@@CAdY{kOL=~!CYip9mvm|t9rzH}vKgv)7DOVJ&u!R#0n zUAP%t9zric7<%i_Fg}ekp3K@qQ!uj*8iYtAPh2ZF*It4IN;84cz!Tl++UZ3dEoseD zE(TQ@ZDl<{Rriz+^-l)S@D%MSN7z=5wrzx&j?-x=ItaSXArU)v32F-7ujqc(PbJ2S ziATjuDu8}knK>`g0`UTvqx>?4RyO+yScQJpQJ~A^qzPmOJl?NZzzbCMoet2X(83lf zjmj0TFCmyeDqz=~T5u3(&T6MAv=J(7ry|q5k@D9F1T7i}Z0n|I;yq$3p1J;CAD>%O zZ!m=eGbP|U3Qlukxp^{ei5tWQ__NB$H1E|%rK#H4nXmX9^~FJ{>qRQ87rY#Vd<-h+ z7x*2$6h+U71p3C(TB^t0a~>-((s!@#yoNy2N~AR>;Ah;-&$D$Dl{T%Unt9HeR*de6 zY1+nof-GeqQ`wQWY7@Z9o{FO6$(R8w^H`L}m>rXkMr;>;b+T|K@Eu5f9Apl-2&Lb0 z+ilC#=i|YL5(Y8XZ$=Dc1~aLy&v+Rgi^9+Nd0z_opJvda7Cb%XBanTNOTSS3`fL0D z&G`QuWX>EJLH40!sxpQ7!Te-CzV+sOH2Fu?_6`7J9OR_r z`gvQ)wF&`kK4B;ImV=o9=RnSHkyC5AIW@K9wyqqqos7i(fbsjH>LBFbbZUfRUg11b+LyMGrvstD*U^ z!L$p;&wpNp5C3f*zWVwcluQ|d_F%$REZbe>nC{Lpsx1AY!Ij2zAEmsn6g~bdX80@7 z?x{c{pI2X4hDJWO#aD&ycmsM9w2PTWEFj1Rit4erq#o;QJF%yG0Nc72V@>OPEUBH1 zIi+3bptWrF6KLT&%*?c6ZdoT*HqFD@mPJ%=U1*tBhVo$?9eDy55lm&Od874H#3LIk|Y1%+*v!p z)lMa+FsSi&6jEoiUkV${a`5^%$fVMgbCv^HPNhkm31o9$;_X3*eLNQMegRA{6V#;E zJ`OS`2o;6ErNsoni^m+~6q;`{xKZIO9O<>%&?N-Oa>7J)p_bY)PA!M1)F#rN+F}8r zm+M9`SUTkN0iy~e>@>HfQX-{F$TkXK0-BBjmo=;$Q9w|6Y{O)g5jmT|IJX5cW#wz5 z81)JJbug2)R84Fz|A!v_udQUc@-r34G?k#iOAxbo z#;K81V*<5X*MgCD^HK?1I|oQrj}$#I4Glx%92{vSa})ZHdXauKzzA9SkxGwLf)plj z09X+77p4q#2&V%pFF^krwDF<6b#{0vI+l4#`b^%l2aSwlZoH!sAZ zvYF`gHlku=+V<2evD}`J<@Zz&R4N}4*eVH|l1KAV{uou+6FhOB3RsvL8?=?VaFkiV zz}E6~*nrl|=bG*0?H0nTjnGm|=LxRJK}`v?st!=}5Tde*j`O_{`Jnum@ zU$c26&*|an;OesWQdJyyv=dn7aSxJ@xR7|*ZL5;8hy93r+K&){qzHV{3-50^^Ilq& zRNj}RQ3zz8Qr?$SA89p`O1036rb>_qw}Ri$YNP|Qyx;UA|F?VwFaa&6&hmAeiY$-M zxA;s1`HxM-2-RA?w~W{5(gz^>#i%62K5BXWlMgEJ;Rg%wmAkVM9{DKh3KFQAkg*)H zhWsSjyv1k>2vkujuQ*!si_n@^hL!??i$H6l3Tq_53}XIj`@QzUB1^?smTADM(gv(9 z=dr97%gXApu(S`WJ$3#tuf+E25T@G7Hn(yEe{$2C!_U2IAoEhNPJRAfHX@aJldur-hSP|N#dEfoS; z&SvU%^HU)LOmk<>{8NF1MduHv zIwHUp&~nZnO3;iXtj5F`gw)umZNj43(M3xCVCcCj;8rMEb?HPtXJXv)y<{6T7p7wl zW{TOv3d~N<9#&}cU{)6?n>!(f*+U60g4L`e6{2kxLzT90aukcFCb598FOWIAeFrdu z|3~Lb{0;~)!K;k}mZFiLe*@K)K-Q$R8A88@)=+)Ja%xQZU?1gz@f@MbR+p8sX9P1Z znnuJ?$ALtZB&o;pP{Hpk`&`&oCgYEI5PisF5R(cE5nh5=P#OD-T;~dv78$GzWJ;BY zAn-i#m%J`yv)75=6aTb$1gW7=={2s7_}kmdho*dp(@c$+^@`?QxJ3-HMM z9(6$W{r8sxKNH9#LLPw3LMluE`;Zp%XFUGvPs<&U-J6NP@Xw%hybmR#lc<|oWJ;_v zL=_e-Mx!rARhB^gB%TQ4<2)wOL?zbhF1MVsMk*?)Hud50y&t|{g1vN~+4 zZp7xgHY_ftLMv&s0`x^yomkyA7wcv$!7>7EPHivROIpyFs6|7x8XcKt%&F)>U)c-woQ~RhqG1|v*G0XMRguS*} z(|nh8qF^i~kY)`nFo-E(RnMQVdRHo}f$=f)yzH_Gd`;x5W2^dvsi=Q|YHZQeG!{%s zU=D%$(Qe-nTbXPf!q0y&y+SE8O@x$zjGtc}t)wRSXN*jtjjFevVAGUB70-nVexDT_ zn9BKmS}SS}NTvKeC0W-Gi=&dCd*+D(2I0oN9(*u!2+cD26xniCVy9@3_{ zVFW+p%zs%1K4GO)3e9;*ZTTOHGh%~qQ}}g(1|rY3K3?g*=XmQ)8&+Xq%;7sbtjhb{#E5F1lRBm`?~TN!4L~ zq#SbtX)KNvVO>cjHdhI7RTxMXqc2iqIcZu9SXk4If%=&kXzs^?mVV4@>a$qTGzSZt zcwgNt+RZk!hw4y2p%mF+$-y}@r+`t)L)jxdad~12W;u{m@&4TH z`lrHZd?sojt9zXHJ@$(Vt?>z3O)5HtVCLNRSh_|h;iXkh!7I1QnS+{O*2Bk~$^j}k zhGRPgGR>>y>?dvMAk=2j8Y=`bg)FDiIs_&G$I*2z;H7z~ziR>2n?NRj z$v$dl_uNFjRv~A;l8;%hxGV%Ob?gXc#~=i+w=UNNy1CmNr@@VLalq$ z`NI9_IAIp2-Hcgs?9@*c(pKg`HpM3UfA`Ca>>B;x=MO-3KYm7Q>1+pAiJzhrA5fuv z@Y6p0@pl)YDfS{-{5MPxAa7**cOf)as9dpe)6P({LA zDxdygRCYYh8^!w=D!o#HwhFZcuX&>gG)q#|eNOiYZG@~zdz-k|+?Q^f`tqXtMXIvF z^a%lM7XQv{{=K(#Kq;$_28rCzMJNA;dy9fv@vJ$*mR7M-5=HM+)q` zk*Zf)YVAL14G}->aW)5eG=eZ;BPAw)g&&REM7}^~6Z1AvA4J}71Q;ROLubA#_;?Bv zKT&8UNPfakB}l$UXe$XUJy#R^d7sn@r4R0h!*G2n#>bL;e#$^r_>c<|eq%DG5q6Uw z8imQvegc2?dn09iHkTA*XJrb9TCzCUM!Q*6iGg?ty1Z$$`~RQz&NMcz?7H)mxM-s` zN|Z$H`^KHDVinigtH|QM@6UO(rciU~pPK-&?ZaZ)?=|KiE6tg8TH|h`?k98)qD5- z-Z}T4dvBLq4Uekj_0q^qd3oX)d13Ubyf}6hV7mse&C07|*W`t+%W|n{Sb9!{B(xW9 z0KUTE60a7>u2K`o$ggo1EUfNrup9w2x|`~90#yA-sR8V_Fr&EK2P=-2*$7?&%GRrC z!vH`w0_$#ikAEo+jbcLq-A=-cVAB>)$o3w%q-xe~QLJBM3n)_pjU#bT3N*FUjO9j` zGYvD=u>nGCAOO%5V23Qk00KSUp)x=LDfjUhXBQ=8x(4U7vsNZebJ4a-S3v^-PJO)uTGvl9n`VnuHk&oosGy< zfRr7)-|!5`i`6l?%BXsri|NfXI2I6_0dS2tZayqyfK070h!!+0>EYdYUbyF42fDja z#^B;l9tp_^?qeL5xw?{gzU_GK3}|HwWMpfT5n#sIjR-J5fDz>EM*tWn35g>A=FJ|c zQHSE;xcaOQGyNz18l6vfQe(e1nN~*wGD56P16&!EPiWN@8DOP5h5Pgvt<>Mxq#$!6 zZv!%)!i-@TYLOMyh`Sgd+}d@;xCgK{I>C)b06a=EQbZnVYaR&z{l z`{VMNNRNCz+$(PfyLGB9omAHql9@VKautBanR*#HTMvt@Mcxc{$S?Nx%2#>=^4?gx zyg%6|zcAPfw=*i2>tNluB61@zBv%5%@^b%WxifZMUL3k8&ks$*y}Tf=UznB8%swk` z5O6)SGU@G;cD#UrQhZ%^c_a!zunS2$VAT%SfQq9)c5cO&dK+8~s<=`5w&A~})W4lB zicc*xLarCCrvY5EzBD$awWjVTzV;I+^iGY#QgDWHu+@{A!3)CfP)3BCN!e&Xz|mrx zh08>x18|!FI6^Khwb&SHa1c;}w1pH_h-q*Lq(I1q2Roui+P$?FpLVfI<#P>|k=0cW zRYXe(@G#wgn6g`tk%2I3$*<o(PkcZXXVaE&JlisjniK9LXKk;L50ig)>O>ItYL zBfL05tm!;XkR|4(L>4|PpMCa-v>n<8YbqdEkvQ<(iy ze~0|iK%czZGbp!%opOaOqBVFS0{!wr$C$j-Hz_XB3)nWti z2s65w1esIZrr^q=DOiI}kfkAJbP>l;?6hu!Zmso38LQ1$Z(6qosM#^o6hZ(PL3Cw5 z+*Ii50a$Yf0}hyRcp}!#5oi`V_ImqRgf-^ck+)P=6j!JU*2(IU-&&(N#JfE-ZlxwF0 zu(%olDwkSdv&V7mCjxRA?(-BZP7AW75nCM~qczRy0ah7w!=hrvKCQ9AvVd0ZTWgFE zqk<>{Y=vaX2|?m}gRsO{iSJdIvAYo`2(cjJs1+7s4Mkq9yf-b8fDnLWS{qG^BSR^w z*Ed20755pyHEuPP`n1RhGPYC_Vzk<7H#DkSNr+JlxnL!~i;V&dphfwu+gvT~?JhaD zd82&w&1x7KcVuCXy>Olkw~~77AWL@~?^mE{%A0iW1^G9>8J61Zc`|g~D^pc*nW*TH z3$>j9Oiae%4zQ)N=QymEQ;jlHj<0)-UtP*q8e{UJCn{H~eR8o9u1!Oyyc`^pH{vt$ zR`;}gwtGz8=^c?T^$p7BJ0kLKJS^|DN9Bv1-SX9uN%_j~wA=~x$`!W{;ET#Fe}~)( zb;|Sc9(lPJ78>+Y{|KzK8CYe{$Xm0|%Nx_T(e>HS4hEAZ;K>iLIWatY-tLEYM6`8h{2@ zg}Q)a(qiv{w2b8jmlPmVD-D(zLp<0rYC5x!pqHmp|)@6)%|ek2{DM)ovoi! zYcJLKV8uMNBRn9&VT(Ar2h(e`^Z*W%5|pWZIL>t3ri{f#cagDPm*JLDI@I`aScEu+ zv0nt(#6Fi=VYIL~$t}kUPW4)H?+VA zFH=>(=Lbt0AnF3lbi|6ie(fj8>DlR1<}<;ptoPc|sAGt=?+)s$MrwHhT#VEY z?*iO*F;v3zkyMc3ckT^dt+;0ezFJcNSxtdQY5=%eE)!%0Mm2>NNU*Q~B*LnBXF!8o zd0f->h=y1gkTr`JE+|1p>x`}@f5&6%H@l=}W2Lxv)XKRndGg19I3_ZG3trO@jE_`5 z=_f!>0LWO;Z-()?x6qDsP$W44kX@I5_^TJBt9&!u$|@O!yD)YpCRghFWwNqEhR%kh z8(-zV6Mh-M7j@!%P-XzFnR2{z<*+Kwx5xwlH*p#-D1LjfJSG>bBlvw(o@?!pH#-L8 z-N6z0m5FKjXQN~C`OY4BD;$^4cVT&y!w|EdoI-3XzRbn= zLc>Cf;mh2yrD++=m~y=rkfWtW_tMG&jmvBS?FA$?WFrMJ>vC$HS}KIY#-vT)rJKb5 z=?vLcP(q9_vvp|{Aw-B-kZDV3sTX3Wcs z@WFfyAg#EMvXIjeC=UCKwFWJ9AA;-1dM`qZ=?uU|vBLi9$)LiEW5UrA<5*!FR%vvf zM?3XX?ASdGmy&&CvDoCstT*Tl&`2r>q^GCq)vH+)`JrpkczVt77)Snr;I zK4-d1>%%y%exQV{jvfV>ou-YhBxArBW>)`N7}c0m$f94(33%Toz^NkIRL#5t%xRf(Z+6qS7VPRW7+)?bUe&pMmxDVsl8|igwA{@jiJo+##>}gYrf+ zB=7Wh%iI0Ea;F2^VsW|C-7lZ&g@rdXDbMr|$<5&rc>&hh>oYgy)01#BE~LZ}JB&>0DM$0* zs2;|3g=GvdG9PR4S(qs(_aSfmHk}vT-jo!K*k|BI7ZxsO%3`DYdF2qSI=Gx1(2!!? z*QJy$Vts;u+SjmTiCxBrZwkkc?>7Kr$OOe8)|tcj5JJWR!##u80y&C(Y=tzkATwb# z`pmYpYE=Onbh=OrNxZhOf8)&(4z1*+h zgR4q4Yzb&RS=}bL){F5NieO_M*{SvWPZ9}B z_dZ$V0E=_Ou*zPS-}{wu2_G(%v2vdb91BSQQJCx~ypdfE+Cmsap=v|w+tVPCLte-& z?Z;d)a279dc~BYSOva8!Wf+BW;3(X);|}Fx%-ROd)HhD`v zJM)S>8@VX`XWPYFTq7;TE>oGyLJFD5Q{isFI%|iz;Bs`s8tcMKL5Ovr@LHG|u;D9@ zWxhDH(iCLKhfrhvj0xp1AS1+Rp^fi0F=@2UEX*_(4S+Ki8h{RfO#^~-IccqFd>X;V z#sYxN4lAVL901T%%FUcf!Hm$E#yVwTW=HL~xXpuAfE7D?Q-m0UTZ20SrbQC_=t8n(QbD$Zp%t*kkgrY(0@$!C5$n8I z&&5i7f{3mmT}wi&VqJrj=QT*>db*m%tu*@^U|qrG1kh+@5m-Ey?kFv{I=ZUJkFX=i z>R|~If;^7l7j@gt%8C3U`FG!aNo3(wNhZ6^+!`FICKrB@DH~kJG5kA3*Z^?vn*8J6 zd|5iHwn@+V3h6)NlQ_Pn!Cj^zJ%pF74PQV%UNRqE4&NRWmVIss9)u3mh<{&=L=SkR z9R)jnkk%Wt9~RvHCTy#h_CvK2KMbn|mfCc6hfGz3Wx66D*If~LuBk&_XpYINfw+9C zy`jXK7)D}-zc62)lu^t@ThiwFz zRyL=swNbb;7Y=vGb2v)y>8Nx+KYTm=-n`A}w^ zATqIVnm@#4jsn8|rW#HH5p1)Ef;wpn^H*!HETG^d{1lSNE8U43`ws^+{)+<~P7-iO z+49(|^@TSU1eCUEizFLt*m%Qg z0?zVnD)!kz*(@EqaZG7I16wK9iP^43egMUfXB^!fQPk1#Y`8SFet}gQ>2;Id|{cZiWYN^<^Lz<4~$q)bjOL#x8;{EKDg?U138p@4+ zVYCQ%QA=cx<3>fGm?YF;r(=BB{>qK=oT++A#?TRa|voKxv z#ALQUgft@0G{xm6bQJ)bu8YV-O;~1J?Q%0XEYCzn_DS5tUR$d)_PHuM2 zN^ez%H0{NgwZttga54g-)QSf;pa)*BUQV>_9e(K&P( z5F>0RV4V?87HAe`nGjnOQ4uywX>C;&HUeZ;02#z>Rj{_I z=!$NE3yNdwQD*9KeJ+kSwgqrR`Qh&wPv+Si&~eD>Hn;#u#@ z*WYc$d-{(2-ys_bPVdIik24$);AQx)^Eu`ZWeyx8SKHnz8OPaQL)GBK&Oj%~z z{VKL-g;C(bD6|oLftQIug9x;Cd|BywcA@Zhq3~(zCctGuMz^yYFAS|SZnKse!#J## zAf_OLdkX7;^=TTLhHaD$yroRf0+U4o8AbxLJWZ6B4>rCzW4BSjmF!Q4(_u_b1eM2Q2otO1s zuucIqb{}F&5oGMl&;GC!yA-KVZfJq&cyotfr5%JNj1LkA1aN|kZY1NxEXY_7YO4?; zcrKm$7$*kza6_FmZ>(3BlJidb0I@)^AD%@-tuVGo5?oX($^$`WqV^5Q2r&f@QVTV@ zmKFK1pbFXmuO_v;DhlhQyr34TODc=tCIVn?z}1CvSGy5qaH~fe;S#%xy>K~Q8oHsg zCIP+-er31?EBk5Hx!^HWZaE>ILk05vzquolct#Qn95awDmJDQna_Y$*Kgd|IPnhXC zEBo1U39D?eM;4Q#vhd+0k-1-#FWzdAQ~B%RF4n`cLBYY-xP5;>x(>r#JRAh1V4b1x z`tj1Wq5!q+3W&cnWR?jteEoxa;c`M@j`9kK4V-M(PTvGv^Z>r5Q0$-=aPvyn(MApJ z=s$%o@d>;P=l$A2o$l@6xqyt-v}-4I3$yY1cAcJX31ofO<<*hr<>mfoWxQcX+VIl2 zx6}e;u*|mL3k{fYY^eagfRt7Qqu>TmSPjhZWk-QkxIuJ96=;B0Y!j|A1+#%&e(fb- zTQ$?+8K(YhHIUINquXg9W_k`-Ia@x{Aj395W_YJ}NnBUA)8PWz;fDwyT4EMtcG<3v z?1nW4_p*0OoeXYoSjvxZB!rj_!5wGH&e=Acgh9U?CY;hBV7S0MpGuE&Ko`%Q!-{hx z3LR1h;G_mP;2~00-V|A_juqxA@+|e6Y{5s3Fyl7Xi&3lx zqZ`T8LXDOB4^cl|}V{SdEGhtHv?a9Dj_J_;4xN0_nl?rwA*pGs8JKymb?v zH!JyF@N_EidslHlyts!4VU2z8E)0#kZ^}=8L~u>X{5%Z~j#|U?$%yWMLM$>{X=p4m z1GHX%Y*-fVjsaw^$@l-qTjD>NCyga1C4Q(~eE6zF@uhBug~fi3RCr&r1W@pOD2#r% zYXQJ4xH|~AwP70rRXx&HQZIo$E?8tJkSBsNa4HO_0TOUW3AxZd0H(|(!TkWp@Tmt1J+lgoh-x#;Jhj5G3V*A=-v^n%=s zUXi}?E@{CF<=I>-jhkK4hA%khA!OVT3$_o?@}a;6@P!P)3JYy)Q};8BuVo0pGxcf) zWVFgmV*o5FfNZH{b30?37>{NFhADa0;+kx#%Xq#JLHrd ziion1qow2oo&gzv0+-bRqm@Ll(>1&Nu>T^(vD*5#c{H5_tSFv`9qieV zF}^3Dp(gAi#NQESJhzRVW6C~|Dq4SVb%y{>T3#Ghhn4mm;v8}Z(CdLa+RcvO_&vwc*U?)6FcTwYS|-_uqZRpdA2*>q;a;=)BZiNz zALW(R3L0hscyN-C!1l0qH=;Gh7DU>7>hqOYUEtMw30+!r5K#{GRn;ON7=kMJPXl|;N+AS`r z1CU#GN2PM}Q3;h7%17V-3Ou7{HFhkKNJSXHYoc->QxRmKy}FhJ8E*<9WT_>Y(FKeW( zutMGAK#3jE0Ak$;3RnPzO(BMY=R;u)ZT3OfW`U-4W^ga@(wO)&(+FVuaWZ8qC>O z!aZ5+bH&L1PMTX^^p-l5h)U)hDQ&Afue?%%cY{ zPv2I!fB22f_n9+&@}=-|a`8}90oJnx78TBI`#5sh#?UFWcwVLu>%4RjOIV0p?ghj+ zz$M`|Tn3980PDrMb<$gajLT_DtVKGpOlzwhR$@C~t5X3IV*Btx0L1#>(sDu&4nxgK zeG4*;*r&CHXT({JOq`fsVHPZD(STPEfa57_kQP4IT`?W(P%W{IsY!BEAZyvdNk5tZ zqK2iQS8I`}iwRJ%Ws(rn`Z2ha6-CvmstpZ*7F#wuqgHD-Wj3CWfWLZRzG3AZn z4Z?B?WU>Hr_Qyy+{H#1TcvRda#S%YZfD|aL0l3OxdDUp;JuC7fC~Sm;9}kF@Tgx`M zb30&(l{RRgYNQNbQ@Eu)hr=4qF$j%vv4HfR3`!hn=s>G9BmZW6ja%_G_Cpa^ zZiDCBWu_k1n5z$IkIcBbWXc_v8CYbqfZ3S4QwD0IIzr`NhAXOoCiHCrdfPzr5@1i%$y+c`poM>_DFI$*)Y_h3K7 z$#J{!pEw`@$I{o>KztAgFpe3rjxnH~Y0BpP?0u z+}Egnh}KyH0PKM!&bl;?&tJW%Myg6S$QxJBiX^`zAO3JeCkIL{(!l7F1R%ziOS+fK z-{HrnCjevwm!&#y3{6+N4ofXDEQ<>%%k0Bz@}s|fTVfS?;@z`b!iVbA8Y9F)rL};Q z2X1E@QlErT&R^iHM)h3I{?f5UhPdV#>rS=nQ1qvlX!{B{pw;~Z0eT@Pq$ob9afkTWH+K0 z~?~SFte~*1~hC-!^{AUmYTKNxK68$acfK&!A^kL5j(iu1m$`Z92O+( zGDYi+>$WpBM~5J+`gg#xgS1X6l@ey`onZPb8h~{d12*^_;nf8z%z~8Xw*aG@-M6%l zBd>`7!#cYOar`%?LwL@t`)Wtt(PEd@ZPD`Ls1*HsIm8m7hI>YEArBR&estGXS$<>m)1qmp}%qOszJCU*v~jjl~pV99xXRux{Mj>Y^&` zcEpxX2GP<&qlMS7EvR*AwB{_(|b%ndxc?fRQnUG9Xwaa*AR4e}n&I5#1QJJjoluOM6as_Usot5cA^RQeCPRaA} zYjVXuB^@W(idl=iUEToW4!S?;sk05 zuNUy%;*r6!pmY?QA$0mm@xel>VG;nH8Qc*68Q0kffN`8KT46C9&kB3idC}4$$U<;O zImAw67p(ss_z*%Io{7Wnuu{LhB!vBb1y&1N8(BR->l)UXE-S=*(u5BTr)&%F35%O< zA6&~I+)762SLb^H8h{B_6xX@TpjR*4KyI^En6<wY zSJir0UWE~FD*HVeV&UEz1mJ>dkyUKoC)K5S@^}C9 zIk=QJO?N>JkK((@`fG~ItP-+y+nMk5C$A^OwIsZ3-IxWL**-TPMLK|+HYtm9(*W8< zk-K-~zyAKLRBX$W*4?K8CRk3}>$Sd&mG==?UD168UdAd5q`rtKVB1~V2a*EZHa!D}&{5$Rj;Rn`E>+ ztRNdo4Ykdgo;Ww=m6jp7(8xxBJ{=Wf+}$geT1REpH!h>FRnRLg~>acaAgV z!56q0=6>6z0IV^5)r;DsWdp8xBiu|BSWbzr^=L@dD#MHH?7vC3(tV-jux8Ja-*BN)YE{Fv-<%9rUaYr!@2n6Wdpg_#AFZU;EHk1iiAF}0c? z1F)6QGCdp8B4n*Bc-exhgBHSVBaHm8OoAKg65-yUr_>1q`2Plgf2C zw$Lx`jUl*~Jl+G#AC_IwSt(zC65y)R)=Bo!q`S#H2*BoDa6e1VOZkpG`OE)&OAbja7B)WVQJw7I@t;L5{3APU+c^|4g{sWECLG+?jj0Q^H!JmcewyNfDa%WInpAd z$Ne&LA}IaGgBqF1-abr>%qthj;WaG%Zwr2lk4hRb2m5oCbY zY-7J%higfo5o}|19Z;u?W0@}JY+yo$u^9x6@cT@V+I7u; zNjP^(w&w%81rbI;SQwYjjmWe07Y*Pcb`K)3IEW!bBf@}{xo5CS0cyI3aadIR2oU;= z<)auD!!AXP#{bsMugR_ES&ds{5H^S0VQZweG~>7c?mz1}8O+L$Q8Q;Q!m?Hu0A%zC znqWOsY)Nm~fsYi<(Y!sZR+jA>$&|9)i@aOYEsX?Nrd7u6407X`EdAZx%EwQ(a} zj7@%ktW9A?tBgUFtXwu7(aop|1et|crU*0(Gp3ABvtrB|VP>@)T+88RQ$mcX9*gr@ z01-A$pe=)%g3O548!a)qe@30eZ0JwS#$~3oxtGzM8b~Y5=&Jf{;|N4=Ko8oNc_M zPR?%HCf>vO@~40Fyp98S_s6ibXl*TK0hw-pax5{cC%_`(4WW3WtTkpq)+Na#*N0>w z(Seln=+PRxAoFwmvTzs6AHE~s`_oTL>#;nk*px5*=Y7(1Dk8(@qtbl>?!~b>={Q^q zDAlPI#;}JrylDQNuvXxbhD$sU+)O9}SCW&6#196f12AKdEoE9cVO<>aOYd>yf3!vV zV2ur*3CMI^w@yWO!PTqN($PX2JmZ(?nwZRbdH}Ruz^qq8G-g|eG(2Ovg%bb|%0Nwr zH0_2f0aL#L7J~(u&IVmzw|*#W0Nm47M~N)0Q%TDN`Dg2GI?rxEurotpb3T zijc$p%)ndiIt9^c=WK+adUp7h+*B3ry%jAng3BC>JX3iopa4r_ z^`%_lVk|>3z=MjyedDn~K!spp3>VYUBR$f-DaNhI|P7r z?1X!Wy!;zD<(g?!v6e6Exa!u`Nd5Y1d{9gvbK^#jx{#a%#9L%$?`HUfnNN}-6g~~3 zU}Zi*)`I^`G3bt6hs@AbJG_1k046!)1u|VSWo8)_c z@v6xDo07Z>i)_&jnn;j2g?Dk0?k1$~X=>XOpeLk`Y&G#_j;2P&Fu`|;g+aM@moqQ1 z#bj8L_b$r94_}raeD4eL(%4a{+MXxjqerFxY=d;4Y>>WFa9xhN6l8(jwc^|9hP( za49djI%NhaCkZxzvpq7+Sv~$((!z`u zn&~JGaajXn;ZCC5)D||twXBw=tqp1sa(XyVQ4COP(|R}d`#razRE`zo$%~VxHm-%~)8W@*_`F40grghS3SQrn=RtH(bSt=?7#eatMoUllgP1MGFkH}t7j5RwIlEJeEV1yT= z{ku>3bxwhPsOzv-HFnl7GqvpsGlJ|QEU`;Xa4}(xu`APTkacC_GEzGrt-CoMRD-Yu zvp&Dx)Rh&rD#$pH9$yZ=B-(8602!yv*M55r>AZ({*$6MwIXMk8r>vF6E>Q%QQx;;} z$KC}I!UGma6fZrODeZBf$Mg4%SZ7^a8fXS;bW07~Y;2otCAHGy2r61+INml=5SA96 z*+ht0kZG470F0INgcH?LYU)0J%%2+Ro_bXWJHvnVo9@GYliXzAeEiWuS zj?~Hud#zu^wYdr!qyg~YOhyD5!zIi!GBWc^HfeVwGlB)IBisYF9x{^NvpujX$g1)Q ztyTpYfks!;j{0gu7u2|!=ht)83%8UPdI2(1@z0Qrs{AVPY^j1*f%15$17&ecCMzz( zGwGCu?I-1MUY-Qc=gIGX8_-IANhI-{R@d;o(kOvs+|*0!I^RdWn}is**;dQcd%Cp$ z@#+Zx8E*>3bqC0_*>@~ujSb323#~}aO) zx;nK(qDM|j`{6q2Jm!Wx5`#4aiu3Hd7Oqi*;REUv?GN*R_@* zx#1tvkuq*Zr{vj=OETL$EujMpR)j^iv0m!d*BOwZpx3WAmYH=`xSg&gE1LO&(!!t> zrVs;EoB*@3;No%%KxoBvx>G*5vIbZy-Au0g@M5sbR2p7{9QP4)I3A)EWo0ci4nIUl zrNcZ-YAfl@dW#-Ih_S9qhcd$dG9e@eSQf6%>vC?>{;7Zj!9^>p8P*5^Ps@v`T4czd zR;q#w|4Hv3?;Cz^LB=o_#_cr%7Hm0Yog`!XJox`DxE|JnF$T<5=(8b)9~*vP82?2p zYz4?@q2ZaZuF8Y|T8C?7%oc}~PJ_&J72+8CT35Et435YVDb$_BHK{v^a-h~&$|7UR zmdA7XE`Y27P~&hu?8?LuUaK`;@=`-Typd+S=l+&QT($&;_#ZjgWa-ly^L zzXOkE3RW151)WcJNapAGF4_0dykF^el_2AOzK7VJYqfOBX^~l_V5YLiSm4>?%?;GC zk#KXFGTtmP511uhk%fQywEUmHxFcVDzD9<;JH%a@Cv6AHBz}_Pkl_W`#r~Hl%zIGq z_tuHOtU*Et@gg4b>99Y3fQvz}1RPEAw%uOc&Zz&cQ$YhWSY_iCo!Zjb#fAcQVS?K^ zbUGxHm2tUL-z!%d24vPVAeT|7SgtkgvVvk-z!#>mqZneLEXGjT=k{SXiB z-n;U5|NRyD-CvH&m5%+=Se7TX+l!>Jv`m^ykBaZ$2?-oMBkd<)il42Q_$gRl$Ll3{ zuomE}6<=A6wC=Bw@L{)foNki-iZ&Un4am4VB-4#C8LJJ+z`17WI^otjx!$u)GE~(n zlkPCw$WEQI?ow-~Tx@}L*3vFBtwtBx;BI2y&FF;o1PC4VO8t(rQeS*dRk!85)NiT8 z*Sk)<+iRt9N1Zh7td-WCb>iC%@Rpj+@9YGx!glU!-2n@d+Fm2gQ08`-o>67S+on!016;~rlH-gl<>iUIJjn@#Dvk< z|G?$U^}ueoro3kRpY?xYU1z(($Ep?iweED`{?;#3^G>&lA2J3nQ{EkL{kOwv-tN)? zGwZk2hzrk$a^v1*Qv>p1%43-}mEz+FacHNyt<|d9;wlxFnHPVfLqDZ{n|TiARkO8H zs<%~2CCba$q9byC(_uMXP$Eb3)`@pdvE1mWl((xDlUqa_LO4E^IsVgm%%ANUAxxGNnZ_AgHg?Vx)FHcStt&@`**2$TT`Eq`1p;YhO zAT_%;N`2{OaqZhI6{Q>G)b@39Y)hV;*qSG&cdVE5yNjf9{}!n`vP~LKm#RFccT2;m zUE)4j0__kN++NqI5^1S8B(9Tt<UeeZhw24(cW}*AHm;euYkF0 zviRXMc(AYFA%8)B@V8%)zy6cAnmmVeSl{}eGAViQ+7MkUq@N`=6h31`?zd>>y+JZ zf0u2aF5^Fb_v-`lpML+U{I5TIO@8oq?@03heO_e#Ga?_}LixUgGEaDoK!cK)=j7J| z8k3n^9Fuu$%Yp2PP`~!d*Pi)&K-!6w4~EuQJH9wkmFeWlhlU5Z0PxM>OSAw>ZQ+tE z&fS#7h3E00UxpYVh2(3J zOx{5OxvksoC0;@Lib<2N%H2gAtLe+S{892H`O(~S@?qjd)kn!!WI^!zvY%X8zswO{sqF97)2F8%WCR#v&9sO9;(&&0 zq#Fj<%EIssx|=asNVH30flwpthEW)MQJCT=Ae~S*mb>KMd=JzM01cp^3}U%omyP;V z^9iFl{GRJPeuc1~y1Rh<61{*_S|28QR6oJB++FOFIe_;b{?A>w!}oA)ca#14+xg@W zfQEI5*OAV@Cw(n*y{d(K{mW8L*|jj=w_>|9U0|x}S(ft4oxpFIX4{{c&f|KR=cA;& zKlc;woe}Tn%2fX&o&&EpTdLQ&%66XLnJ(>znCdm&M|>7{@td{ET>DC8J2sn~ze%Fp z8_UX+XTBHnbMQnsZkSH5NZEIRQ!dhL>DI}xIm`dbck1cX&w*=6D~u_Dh8KK3w)C*f zAaHB|;DhADW~_{P@JX24ECk%HjRbhuNu=gD)*TGuVZ#(x=V08@2 zm>$R9JpKB)s3W7LWxhI`C(~GAe2~UE1GHcTEx^i2EHa3ea2bOpQ2>Tg0JAb*DvA%9 z1;nOy*%SaPoHL2SPnXt;U8=0uf~o}%*TIw~zH^;vlGmR4YAV!H+hHY|{rnx*krxXg z#dS*aftJ14tE38Do+Fhm?Wef@C@HO7PT#k>>~X6~?+O0vYN`G|F0YnC_B?ugmi26@ zoIU{{Y&}s7)}BLPeNzu zhc%f1*l=A*=I!{{C#HLl=-3=W!n!q zt+Grl{cg3C=SAUM?HV)>N18?H|N1B?#W0pfNk6{Kf3W|1?J4s}AWb}CYOdqa(}%sz zpG`{fIpSlTdY%e2ozKsMp8CrErC~*~Y3WNv@xd8*nYc3}=R-~_+qUdtp7zVWGX3ev=I2bQ?DysA zlKn5)W$y9n%J!Rw*UIb3{+w46ufaU;M@?6Mz7I;7hqGFQO8*b@(M!v0&-`8b_@`S> zKgd|2o`Tj&S%5hoo`smLn{qz<<%M*moaZ)5=WUl)Q~Im<@Up+lOw&pi(#MfPPB;2d zWb?@?o+q1@KMUR$9>3N!ySVQ`N}r#3{d8omYwf88nSojQ8ngX3`x`0~d{4K2PU^_4 z`J8DEHs?z_OP1*i48f zHwUsOO4en}{@@@!@Fh846h1_wbb(!NcCVD(pFV!o^JZ1*I0CqiNzqM}EqH#jtNtO9O+0yLCTd}ZY z+n%Y1J?^Kk^fP*N*%xB%sr~(Jp4wwFmHJIe02%3Q3C)e>B{#~J3ASYgSuV|`xipuqEzQc6C6PgPeiYo{R@&%gC9Tg`R<0F3qL6G?zYnx*AU?%OA@g2gnq9_80|OCcvDsncI^& zGficP<8sO=r<~R~_0vHHZO(>J^&f0Wu3MXVY`0(qKzlaG4j7Q%*VMv=$kL zEcXbF()-s8GAj!%C%`Cs5}uT;Mn?8x(kITPxipvN(uYf(@G>&2Ngqc&6v)z0N`uJ> zC?gB7gm6e{iX*Tx05z3)D#KiwOLJ*1eb{ulu|#F}03QNmX-FB6Wy-?LW=fbDprygb z3(F~|oN`*bmP5>`G|bW*O7TWvW}&DcGqZN5M-1gb02HIj$|QIbHzHo{E%01{?AjKk!9$wx8Yjv3ANs{B(bMg*aWXzny+k_p$I){%|D~*t2COpnw z2xW)F$)&k8m*&!kO*z9^Af-@hom}CZ7-p8Iv{h!b9A=aS*^(vJE{jROBp1C{u7_#? zEht$BxkM7!o}?O6sTapKEMi@xjBspIy^Ye$nl}fOv8Hxa8W~#fD zAcGt&mMM_YjH7?*mPGOtKvs$jwqkt)v<_OIQbC4R+n!TSIpy?lT1i< z!7@u8!#Y70#x^zzSc}Yp%vxp6WrB<|W2;rxfQ(?;C5mx^LadXN4p=QI1+istdkAIw z6I8Zimmrzt{MquLGLO5j9wC3LWyjwqp9d*xepZigeVNDISDE>*;XGE$j?eP@2Ptbl zk09qYIhF0$kE3kopmhJo`2WlDd008lmzj^%vg3aW%61Ma+p%jXS89JtMp9g70epcD?q*D8x*W%Q&JnpA#c{`OlF55Yr zS~Wkr{Q+8$&m+otO-^My_T%Wj=lB@^e??volJi_pW7OANvZuA xzh@o10oghS$l9Q8?03S;rna@x?xT9;{{yaCdcWPV4pIOB002ovPDHLkV1lpTWVrwU diff --git a/code/static/avatar/default.png b/code/static/avatar/default.png index 03de2231ca8e2fd63f4fe8e24e375bb613b5ad40..4b2bbd528177dd16e54e9bc744b134230a352944 100644 GIT binary patch literal 3890 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 AKmY&$ literal 48120 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
qQ)ehSY2X37Xu1yH>|k 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 QmSD0&IZysjQ=O>)* Date: Tue, 29 Jul 2014 16:19:11 +0800 Subject: [PATCH 52/66] add get rank function --- code/util.py | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/code/util.py b/code/util.py index 719da82..43c97e7 100644 --- a/code/util.py +++ b/code/util.py @@ -65,3 +65,13 @@ def setAudiobyEid(self,uid,videostring): audio.write(base64.standard_b64decode(videostring)) audio.close() print "set Audio success" + + def getRankByScore(self,s): + for num in self.score: + if s<=self.score[num]['max'] and s>=self.score[num]['min']: + result=dict() + result['scoreMin']=self.score[num]['min'] + result['scoreMax']=self.score[num]['max'] + result['scoreLevel']=num + return result + return None From eaa69b8ae3bf076dabbaf531e6525a34de9e8016 Mon Sep 17 00:00:00 2001 From: Anton Date: Tue, 29 Jul 2014 17:24:59 +0800 Subject: [PATCH 53/66] add operateScore function in dbapi.py --- code/dbapi.py | 11 +++++++++ code/util.py | 65 +++++++++++++++++++++++++++++++++++++++++++++++++-- 2 files changed, 74 insertions(+), 2 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index cf767ed..e397104 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -933,5 +933,16 @@ def clearAuthTempData(self): cursor.close() + def operateScoreById(self,uid,score_op): + cursor = self.db.cursor() + if score_op > 0: + sql = "update info set score = score+%s where id = %s" + else: + sql = "update info set score = score-%s where id = %s" + param = (score_op,uid) + cursor.execute(sql,param) + self.db.commit() + cursor.close() + def __del__(self): self.db.close() \ No newline at end of file diff --git a/code/util.py b/code/util.py index 43c97e7..c95453d 100644 --- a/code/util.py +++ b/code/util.py @@ -1,4 +1,4 @@ -import json,os,base64 +import json,os,base64,dbapi import xml.etree.ElementTree as ET class util: def __init__(self): @@ -74,4 +74,65 @@ def getRankByScore(self,s): result['scoreMax']=self.score[num]['max'] result['scoreLevel']=num return result - return None + print "error in getRankByScore("+str(s)+")" + + # 1:new user login for the first time +5/5 + # 2:user login for the first time every day +1/1 + # 3:caller give helper credit +2/50 + # 4:helper join in support +3/Infinity + # 5:helper send support message +1/30 + # 6:user online for more than 12 hours a day +2/2 + + # 7:helper earn the highest credit in a event +5/Infinity + # allow more than one helper earn it in the same event + + # 8:send harmful support message -10/Infinity + # 9:send useless event message -20/Infinity + # 10:helper quit the event while the event does not end -1/Infinity + # 11:caller give no credit to the helper after the event end for five days -10/infinity + + def updateScoreByCase(self,uid,cond,dbapi): + def func1(u,d): + d.operateScoreById(u,5) + print "func1" + def func2(u,d): + d.operateScoreById(u,1) + print "func2" + def func3(u,d): + d.operateScoreById(u,2) + print "func3" + def func4(u,d): + d.operateScoreById(u,3) + print "func4" + def func5(u,d): + d.operateScoreById(u,1) + print "func5" + def func6(u,d): + d.operateScoreById(u,2) + print "func6" + def func7(u,d): + d.operateScoreById(u,5) + print "func7" + def func8(u,d): + d.operateScoreById(u,-10) + print "func8" + def func9(u,d): + d.operateScoreById(u,-20) + print "func9" + def func10(u,d): + d.operateScoreById(u,-1) + print "func10" + def func11(u,d): + d.operateScoreById(u,-10) + print "func11" + + if cond>=1 and cond<=11: + funcName="func"+str(cond) + (eval(funcName))(uid) + else: + print "arguments incorrect" + +if __name__ == '__main__': + test=util() + db=dbapi.dbapi() + print test.getRankByScore(700) \ No newline at end of file From 7a3d86322b322ad5f3ca9cfaa90a23ac1f42d420 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 30 Jul 2014 08:35:27 +0800 Subject: [PATCH 54/66] fix helpmessage bug --- code/dbapi.py | 4 ++-- code/handler/EventHandler.py | 8 +++++--- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index cf767ed..f9b4103 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -102,9 +102,9 @@ def getUsermassegeByUserId(self,userid): cursor.close() return result - def getUsercidByEid(self,eid): + def getUserByEid(self,eid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="select cid from user,event where event.id= %s and event.usrid=user.id" + sql="select cid,user.id as uid from user,event where event.id= %s and event.usrid=user.id" param=(eid,) cursor.execute(sql,param) result=cursor.fetchone() diff --git a/code/handler/EventHandler.py b/code/handler/EventHandler.py index 9897fd7..de23261 100644 --- a/code/handler/EventHandler.py +++ b/code/handler/EventHandler.py @@ -203,9 +203,11 @@ def post(self): relativelist =self.application.dbapi.getRelativesCidbyUid(user['id']) pushlist.extend(relativelist) pushlist = list(Set(pushlist)) - if(user['cid'] in pushlist) + if(user['cid'] in pushlist): pushlist.remove(user['cid']) - pushlist.append(self.application.dbapi.getUsercidByEid(jobj['eid'])['cid']) + eventuser = self.application.dbapi.getUserByEid(jobj['eid']) + if(eventuser['uid'] !=user['id']): + pushlist.append(eventuser['cid']) datatemp = self.application.dbapi.getSupportBySid(result['supportid']) pushdata = {} data = {} @@ -218,7 +220,7 @@ def post(self): self.application.push.pushToList(pushlist,json_encode(pushdata)) self.write(json_encode(result)) - + class SupportmessageHandler(tornado.web.RequestHandler): def get(self): self.write("

SupportmessageHandler

") From ea1bb46b6de92828dd1dcef8adc982c7120fe6d6 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 30 Jul 2014 08:35:56 +0800 Subject: [PATCH 55/66] add avatar in update userinfo --- code/handler/UserInfoHandler.py | 2 ++ db.sql | 3 ++- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/code/handler/UserInfoHandler.py b/code/handler/UserInfoHandler.py index 6fdae30..197ee7d 100644 --- a/code/handler/UserInfoHandler.py +++ b/code/handler/UserInfoHandler.py @@ -18,6 +18,8 @@ def post(self): self.write("{'state':1}") print "username not exist" return + if('avatar' in j['changemessage']): + self.application.util.setAvatar(j['username'],j['changemessage']['avatar'],self.application.dbapi) result = self.application.dbapi.updateUserinfo(user['id'],j['changemessage']) if(isinstance(result,list)): state = 1 diff --git a/db.sql b/db.sql index 393169c..892eb28 100644 --- a/db.sql +++ b/db.sql @@ -1,5 +1,6 @@ drop table IF EXISTS tpu; drop table IF EXISTS auth; +drop table IF EXISTS previousEvent; drop table IF EXISTS email_code; drop table IF EXISTS auth_cnt; drop table IF EXISTS support; @@ -59,7 +60,7 @@ CREATE TABLE info phone varchar(25), address varchar(255), illness varchar(255), - credit int, + credit double, score int, latitude DECIMAL(12,7), longitude DECIMAL(12,7), From fc72f9bd68aa4f122b58c10202df6f0b021e31b7 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 30 Jul 2014 10:08:05 +0800 Subject: [PATCH 56/66] authorize update phone authorize --- code/dbapi.py | 54 ++- code/handler/Authorize.py | 103 ++++- code/handler/CCPRestSDK.py | 656 +++++++++++++++++++++++++++++++ code/handler/CHRequestHandler.py | 41 ++ code/handler/xmltojson.py | 134 +++++++ code/main.py | 4 +- db.sql | 19 +- 7 files changed, 998 insertions(+), 13 deletions(-) create mode 100644 code/handler/CCPRestSDK.py create mode 100644 code/handler/CHRequestHandler.py create mode 100644 code/handler/xmltojson.py diff --git a/code/dbapi.py b/code/dbapi.py index f9b4103..46f9ca5 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -12,8 +12,8 @@ def __init__(self): self.host="localhost" self.user="comhelp" self.passwd="20140629" - #self.user="root" - #self.passwd="root" + self.user="root" + self.passwd="root" self.dbname="community" self.charset="utf8" self.db=MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.dbname,charset=self.charset) @@ -84,6 +84,15 @@ def getUserInfobyName(self,name): cursor.close() return result + def getUserInfobyUid(self,uid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select * from user,info where user.id = %s and user.id = info.id" + param = (uid,) + cursor.execute(sql,param) + result=cursor.fetchone() + cursor.close() + return result + def CheckRelationbyId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="select * from relation where usrid=%s" @@ -422,7 +431,7 @@ def getUserAround(self,lon,lat,distance): #updateuser credit score in info,use for givecredit #pre cond:eid,uid exist,score >=0 #after: update data credit,score in info - def updateUserCreditScore(self,eid,uid,score): + """def updateUserCreditScore(self,eid,uid,score): cursor = self.db.cursor() sql = "update info set score = score + %s,credit = (credit+5)/3 where id = %s" param = (score,uid) @@ -432,7 +441,7 @@ def updateUserCreditScore(self,eid,uid,score): except: self.db.rollback() cursor.close() - return + return""" #update user info by username,sex,age,phone,address,illness #pre cond:uid exist @@ -796,7 +805,7 @@ def setCreditByEventIdAndUserName(self,eid,username,credit): cursor.execute(sql,param) self.db.commit() cursor.close() - self.updateUserCreditScore(eid,usrid["id"],credit) + #self.updateUserCreditScore(eid,usrid["id"],credit) return {"errorCode":200,"errorDesc":""} #07/10 @@ -930,7 +939,42 @@ def clearAuthTempData(self): sql = "delete from email_code where expire_in < unix_timestamp()" cursor.execute(sql) self.db.commit() + cursor.close() + + def addPhoneCode(self, uid, code, period): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select * from phone_code where id = %s" + param = (uid,) + cursor.execute(sql, param) + result = cursor.fetchone() + if result is None: + sql = "insert into phone_code(id, code, expire_in) values(%%s, %%s, unix_timestamp() + %s)" % period + param = (uid, code) + else: + sql = "update phone_code set code = %%s, expire_in = unix_timestamp() + %s where id = %%s" % period + param = (code, uid) + cursor.execute(sql, param) + self.db.commit() + cursor.close() + pass + def checkPhoneCode(self, uid, code): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select * from phone_code where id = %s and code = %s and expire_in > unix_timestamp()" + param = (uid, code) + cursor.execute(sql, param) + result = cursor.fetchone() + if result is None: + return False + else: + return True + + def deletePhoneCode(self, uid): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "delete from phone_code where id = %s" + param = (uid,) + cursor.execute(sql, param) + self.db.commit() cursor.close() def __del__(self): diff --git a/code/handler/Authorize.py b/code/handler/Authorize.py index a13cfb5..2ca5ea9 100644 --- a/code/handler/Authorize.py +++ b/code/handler/Authorize.py @@ -6,7 +6,7 @@ import random import smtplib from email.mime.text import MIMEText - +from CHRequestHandler import CHRequestHandler, LackParamsException, NoUserException # # errorcode: # 1: 缺少参数 @@ -83,7 +83,7 @@ class RequestEmailAuthHandler(tornado.web.RequestHandler):

您已经成功发出了邮箱验证请求。

点击以下链接即可完成邮箱验证。如果无法点击,请手动复制网址到浏览器打开。

http://%s/api/authemail?username=%s&code=%s

-

请注意,本次验证的有效期为3天。在发送邮件之后的3天内任何时间都可以点击验证。

+

请注意,本次验证的有效期为2天。在发送邮件之后的3天内任何时间都可以点击验证。

如果超过三天还没有点击该链接,则验证将过期。您需要重新请求邮箱验证。

每个用户每天可以请求10次邮箱验证。如果超过10次,请第二天再试。

@@ -111,7 +111,7 @@ def post(self): error = { "error": "no such user", "request": "requestemailauth", - "error_code": 1 + "error_code": 2 } self.write(json.dumps(error)) print("no such user") @@ -120,7 +120,9 @@ def post(self): # get auth record auth_record = self.application.dbapi.getAuth(uid) if auth_record is None: + print "mark 2.1" self.application.dbapi.insertAuth(uid) + print "mark 2.2" auth_record = self.application.dbapi.getAuth(uid) # if authed, return error if auth_record["email_state"] == "authed": @@ -154,6 +156,8 @@ def post(self): } self.write(json.dumps(error)) return + # update auth count + self.application.dbapi.incAuthCnt(uid, "email") # send email code = self.getCode(50) if not self.sendAuthEmail(email, username, code): @@ -169,8 +173,6 @@ def post(self): self.application.dbapi.addEmailCode(uid, code, period) # update auth state self.application.dbapi.updateAuthState(uid, "email", "authing"); - # update auth count - self.application.dbapi.incAuthCnt(uid, "email") result = { "result": "OK" } @@ -248,3 +250,94 @@ def get(self): } self.write(json.dumps(error)) return + +# 30001 已认证 +# 30002 超过验证次数 +# 30003 发送短信错误 +class RequestPhoneAuthHandler(CHRequestHandler): + codechars = "0123456789" + + def post(self): + try: + j = self.getParams(["username", "phone"]) + uid = self.getUserId(j["username"]) + phone = j["phone"] + except LackParamsException: + self.writeError(1, "requestphoneauth") + return + except NoUserException: + self.writeError(2, "requestphoneauth") + return + auth_record = self.application.dbapi.getAuth(uid) + if auth_record is None: + self.application.dbapi.insertAuth(uid) + auth_record = self.application.dbapi.getAuth(uid) + if auth_record["phone_state"] == "authed": + self.writeError(30001, "requestphoneauth") + return + if not self.application.dbapi.checkAuthCnt(uid, "phone", 10): + self.writeError(30002, "requestphoneauth") + return + self.application.dbapi.incAuthCnt(uid, "phone") + code = self.getCode(6) + minutes = 10 + if not self.sendSMS(phone, code, minutes): + self.writeError(30003, "requestphoneauth") + period = minutes * 60 + self.application.dbapi.addPhoneCode(uid, code, period) + self.application.dbapi.updateAuthState(uid, "phone", "authing") + self.writeOK() + + + def getCode(self, num): + code = "" + for i in range(0, num): + code += random.choice(RequestPhoneAuthHandler.codechars) + return code + + def sendSMS(self, phone, code, minutes): + datas = [code, minutes] + return sendTemplateSMS(phone, datas, 1) + +from CCPRestSDK import * + +accountSid = "aaf98f89476703de01477c05267506ef" +accountToken = "6b34f62bcc964167a6997286bb9a3f2f" +appId = "aaf98f89476703de01477fc1dda307b1" +serverIP = "sandboxapp.cloopen.com" +serverPort = "8883" +softVersion = "2013-12-26" + +def sendTemplateSMS(to, datas, temId): + rest = REST(serverIP, serverPort, softVersion) + rest.setAccount(accountSid, accountToken) + rest.setAppId(appId) + result = rest.sendTemplateSMS(to, datas, temId) + if result["statusCode"] == "000000": + return True + else: + return False + + +# 40001 验证失败 +class AuthPhoneHandler(CHRequestHandler): + + def post(self): + try: + j = self.getParams(["username", "code"]) + uid = self.getUserId(j["username"]) + code = j["code"] + except LackParamsException: + self.writeError(1, "authphone") + return + except NoUserException: + self.writeError(2, "authphone") + return + if self.application.dbapi.checkPhoneCode(uid, code): + self.application.dbapi.updateAuthState(uid, "phone", "authed") + self.application.dbapi.deletePhoneCode(uid) + self.writeOK() + return + else: + self.writeError(40001, "authphone") + return diff --git a/code/handler/CCPRestSDK.py b/code/handler/CCPRestSDK.py new file mode 100644 index 0000000..5944842 --- /dev/null +++ b/code/handler/CCPRestSDK.py @@ -0,0 +1,656 @@ + #-*- coding: UTF-8 -*- + # Copyright (c) 2014 The CCP project authors. All Rights Reserved. + # + # Use of this source code is governed by a Beijing Speedtong Information Technology Co.,Ltd license + # that can be found in the LICENSE file in the root of the web site. + # + # http://www.yuntongxun.com + # + # An additional intellectual property rights grant can be found + # in the file PATENTS. All contributing project authors may + # be found in the AUTHORS file in the root of the source tree. + +import md5 +import base64 +import datetime +import urllib2 +import json +from xmltojson import xmltojson +from xml.dom import minidom + +class REST: + + AccountSid='' + AccountToken='' + AppId='' + SubAccountSid='' + SubAccountToken='' + VoIPAccount='' + VoIPPassword='' + ServerIP='' + ServerPort='' + SoftVersion='' + Iflog=True #是否打印日志 + Batch='' #时间戳 + BodyType = 'json'#包体格式,可填值:json 、xml + + # 初始化 + # @param serverIP 必选参数 服务器地址 + # @param serverPort 必选参数 服务器端口 + # @param softVersion 必选参数 REST版本号 + def __init__(self,ServerIP,ServerPort,SoftVersion): + + self.ServerIP = ServerIP; + self.ServerPort = ServerPort; + self.SoftVersion = SoftVersion; + + + # 设置主帐号 + # @param AccountSid 必选参数 主帐号 + # @param AccountToken 必选参数 主帐号Token + + def setAccount(self,AccountSid,AccountToken): + self.AccountSid = AccountSid; + self.AccountToken = AccountToken; + + + # 设置子帐号 + # + # @param SubAccountSid 必选参数 子帐号 + # @param SubAccountToken 必选参数 子帐号Token + # @param VoIPAccount 必选参数 VoIP帐号 + # @param VoIPPassword 必选参数 VoIP密码 + + def setSubAccount(self,SubAccountSid,SubAccountToken,VoIPAccount,VoIPPassword): + self.SubAccountSid = SubAccountSid; + self.SubAccountToken = SubAccountToken; + self.VoIPAccount = VoIPAccount; + self.VoIPPassword = VoIPPassword; + + # 设置应用ID + # + # @param AppId 必选参数 应用ID + + def setAppId(self,AppId): + self.AppId = AppId; + + def log(self,url,body,data): + print('这是请求的URL:') + print (url); + print('这是请求包体:') + print (body); + print('这是响应包体:') + print (data); + print('********************************') + + + # 创建子账号 + # @param friendlyName 必选参数 子帐号名称 + def CreateSubAccount(self, friendlyName): + + self.accAuth() + nowdate = datetime.datetime.now() + self.Batch = nowdate.strftime("%Y%m%d%H%M%S") + #生成sig + signature = self.AccountSid + self.AccountToken + self.Batch; + sig = md5.new(signature).hexdigest().upper() + #拼接URL + url = "https://"+self.ServerIP + ":" + self.ServerPort + "/" + self.SoftVersion + "/Accounts/" + self.AccountSid + "/SubAccounts?sig=" + sig + #生成auth + src = self.AccountSid + ":" + self.Batch; + auth = base64.encodestring(src).strip() + req = urllib2.Request(url) + self.setHttpHeader(req) + req.add_header("Authorization", auth) + #xml格式 + body ='''%s\ + %s\ + \ + '''%(self.AppId, friendlyName) + + if self.BodyType == 'json': + #json格式 + body = '''{"friendlyName": "%s", "appId": "%s"}'''%(friendlyName,self.AppId) + data='' + req.add_data(body) + try: + res = urllib2.urlopen(req); + data = res.read() + res.close() + + if self.BodyType=='json': + #json格式 + locations = json.loads(data) + else: + #xml格式 + xtj=xmltojson() + locations=xtj.main(data) + if self.Iflog: + self.log(url,body,data) + return locations + except Exception, error: + if self.Iflog: + self.log(url,body,data) + return {'172001':'网络错误'} + + # 获取子帐号 + # @param startNo 可选参数 开始的序号,默认从0开始 + # @param offset 可选参数 一次查询的最大条数,最小是1条,最大是100条 + def getSubAccounts(self, startNo,offset): + + self.accAuth() + nowdate = datetime.datetime.now() + self.Batch = nowdate.strftime("%Y%m%d%H%M%S") + #生成sig + signature = self.AccountSid + self.AccountToken + self.Batch; + sig = md5.new(signature).hexdigest().upper() + #拼接URL + url = "https://"+self.ServerIP + ":" + self.ServerPort + "/" + self.SoftVersion + "/Accounts/" + self.AccountSid + "/GetSubAccounts?sig=" + sig + #生成auth + src = self.AccountSid + ":" + self.Batch; + auth = base64.encodestring(src).strip() + req = urllib2.Request(url) + self.setHttpHeader(req) + req.add_header("Authorization", auth) + #xml格式 + body ='''%s\ + %s%s\ + \ + '''%(self.AppId, startNo, offset) + + if self.BodyType == 'json': + #json格式 + body = '''{"appId": "%s", "startNo": "%s", "offset": "%s"}'''%(self.AppId,startNo,offset) + data='' + req.add_data(body) + try: + res = urllib2.urlopen(req); + data = res.read() + res.close() + + if self.BodyType=='json': + #json格式 + locations = json.loads(data) + else: + #xml格式 + xtj=xmltojson() + locations=xtj.main(data) + if self.Iflog: + self.log(url,body,data) + return locations + except Exception, error: + if self.Iflog: + self.log(url,body,data) + return {'172001':'网络错误'} + + # 子帐号信息查询 + # @param friendlyName 必选参数 子帐号名称 + + def querySubAccount(self, friendlyName): + + self.accAuth() + nowdate = datetime.datetime.now() + self.Batch = nowdate.strftime("%Y%m%d%H%M%S") + #生成sig + signature = self.AccountSid + self.AccountToken + self.Batch; + sig = md5.new(signature).hexdigest().upper() + #拼接URL + url = "https://"+self.ServerIP + ":" + self.ServerPort + "/" + self.SoftVersion + "/Accounts/" + self.AccountSid + "/QuerySubAccountByName?sig=" + sig + #生成auth + src = self.AccountSid + ":" + self.Batch; + auth = base64.encodestring(src).strip() + req = urllib2.Request(url) + self.setHttpHeader(req) + + req.add_header("Authorization", auth) + + #创建包体 + body ='''%s\ + %s\ + \ + '''%(self.AppId, friendlyName) + if self.BodyType == 'json': + + body = '''{"friendlyName": "%s", "appId": "%s"}'''%(friendlyName,self.AppId) + data='' + req.add_data(body) + try: + res = urllib2.urlopen(req); + data = res.read() + res.close() + + if self.BodyType=='json': + #json格式 + locations = json.loads(data) + else: + #xml格式 + xtj=xmltojson() + locations=xtj.main(data) + if self.Iflog: + self.log(url,body,data) + return locations + except Exception, error: + if self.Iflog: + self.log(url,body,data) + return {'172001':'网络错误'} + + # 发送模板短信 + # @param to 必选参数 短信接收彿手机号码集合,用英文逗号分开 + # @param datas 可选参数 内容数据 + # @param tempId 必选参数 模板Id + def sendTemplateSMS(self, to,datas,tempId): + + self.accAuth() + nowdate = datetime.datetime.now() + self.Batch = nowdate.strftime("%Y%m%d%H%M%S") + #生成sig + signature = self.AccountSid + self.AccountToken + self.Batch; + sig = md5.new(signature).hexdigest().upper() + #拼接URL + url = "https://"+self.ServerIP + ":" + self.ServerPort + "/" + self.SoftVersion + "/Accounts/" + self.AccountSid + "/SMS/TemplateSMS?sig=" + sig + #生成auth + src = self.AccountSid + ":" + self.Batch; + auth = base64.encodestring(src).strip() + req = urllib2.Request(url) + self.setHttpHeader(req) + req.add_header("Authorization", auth) + #创建包体 + b='' + for a in datas: + b+='%s'%(a) + + body =''+b+'%s%s%s\ + \ + '%(to, tempId,self.AppId) + if self.BodyType == 'json': + # if this model is Json ..then do next code + b='[' + for a in datas: + b+='"%s",'%(a) + b+=']' + body = '''{"to": "%s", "datas": %s, "templateId": "%s", "appId": "%s"}'''%(to,b,tempId,self.AppId) + req.add_data(body) + data='' + try: + res = urllib2.urlopen(req); + data = res.read() + res.close() + + if self.BodyType=='json': + #json格式 + locations = json.loads(data) + else: + #xml格式 + xtj=xmltojson() + locations=xtj.main(data) + if self.Iflog: + self.log(url,body,data) + return locations + except Exception, error: + if self.Iflog: + self.log(url,body,data) + return {'172001':'网络错误'} + + # 双向回呼 + # @param fromPhone 必选参数 主叫电话号码 + # @param to 必选参数 被叫电话号码 + # @param customerSerNum 可选参数 被叫侧显示的客服号码 + # @param fromSerNum 可选参数 主叫侧显示的号码 + # @param promptTone 可选参数 第三方自定义回拨提示音 + + def callBack(self,fromPhone,to,customerSerNum,fromSerNum,promptTone): + + self.subAuth() + nowdate = datetime.datetime.now() + self.Batch = nowdate.strftime("%Y%m%d%H%M%S") + #生成sig + signature = self.SubAccountSid + self.SubAccountToken + self.Batch; + sig = md5.new(signature).hexdigest().upper() + #拼接URL + url = "https://"+self.ServerIP + ":" + self.ServerPort + "/" + self.SoftVersion + "/SubAccounts/" + self.SubAccountSid + "/Calls/Callback?sig=" + sig + #生成auth + src = self.SubAccountSid + ":" + self.Batch; + auth = base64.encodestring(src).strip() + req = urllib2.Request(url) + self.setHttpHeader(req) + + req.add_header("Authorization", auth) + + #创建包体 + body ='''\ + %s%s%s%s%s\ + \ + '''%(fromPhone, to,customerSerNum,fromSerNum,promptTone) + if self.BodyType == 'json': + body = '''{"from": "%s", "to": "%s","customerSerNum": "%s","fromSerNum": "%s","promptTone": "%s"}'''%(fromPhone, to,customerSerNum,fromSerNum,promptTone) + req.add_data(body) + data='' + try: + res = urllib2.urlopen(req); + data = res.read() + res.close() + if self.BodyType=='json': + #json格式 + locations = json.loads(data) + else: + #xml格式 + xtj=xmltojson() + locations=xtj.main(data) + if self.Iflog: + self.log(url,body,data) + return locations + except Exception, error: + if self.Iflog: + self.log(url,body,data) + return {'172001':'网络错误'} + # 营销外呼 + # @param to 必选参数 被叫号码 + # @param mediaName 可选参数 语音文件名称,格式 wav。与mediaTxt不能同时为空。当不为空时mediaTxt属性失效。 + # @param mediaTxt 可选参数 文本内容 + # @param displayNum 可选参数 显示的主叫号码 + # @param playTimes 可选参数 循环播放次数,1-3次,默认播放1次。 + # @param respUrl 可选参数 营销外呼状态通知回调地址,云通讯平台将向该Url地址发送呼叫结果通知。 + + def landingCall(self,to,mediaName,mediaTxt,displayNum,playTimes,respUrl): + + self.accAuth() + nowdate = datetime.datetime.now() + self.Batch = nowdate.strftime("%Y%m%d%H%M%S") + #生成sig + signature = self.AccountSid + self.AccountToken + self.Batch; + sig = md5.new(signature).hexdigest().upper() + #拼接URL + url = "https://"+self.ServerIP + ":" + self.ServerPort + "/" + self.SoftVersion + "/Accounts/" + self.AccountSid + "/Calls/LandingCalls?sig=" + sig + #生成auth + src = self.AccountSid + ":" + self.Batch; + auth = base64.encodestring(src).strip() + req = urllib2.Request(url) + self.setHttpHeader(req) + req.add_header("Authorization", auth) + + #创建包体 + body ='''\ + %s%s%s%s%s\ + %s%s\ + '''%(to, mediaName,mediaTxt,self.AppId,displayNum,playTimes,respUrl) + if self.BodyType == 'json': + body = '''{"to": "%s", "mediaName": "%s","mediaTxt": "%s","appId": "%s","displayNum": "%s","playTimes": "%s","respUrl": "%s"}'''%(to, mediaName,mediaTxt,self.AppId,displayNum,playTimes,respUrl) + req.add_data(body) + data='' + try: + res = urllib2.urlopen(req); + data = res.read() + res.close() + + if self.BodyType=='json': + #json格式 + locations = json.loads(data) + else: + #xml格式 + xtj=xmltojson() + locations=xtj.main(data) + if self.Iflog: + self.log(url,body,data) + return locations + except Exception, error: + if self.Iflog: + self.log(url,body,data) + return {'172001':'网络错误'} + + # 语音验证码 + # @param verifyCode 必选参数 验证码内容,为数字和英文字母,不区分大小写,长度4-8位 + # @param playTimes 可选参数 播放次数,1-3次 + # @param to 必选参数 接收号码 + # @param displayNum 可选参数 显示的主叫号码 + # @param respUrl 可选参数 语音验证码状态通知回调地址,云通讯平台将向该Url地址发送呼叫结果通知 + + def voiceVerify(self,verifyCode,playTimes,to,displayNum,respUrl): + + self.accAuth() + nowdate = datetime.datetime.now() + self.Batch = nowdate.strftime("%Y%m%d%H%M%S") + #生成sig + signature = self.AccountSid + self.AccountToken + self.Batch; + sig = md5.new(signature).hexdigest().upper() + #拼接URL + url = "https://"+self.ServerIP + ":" + self.ServerPort + "/" + self.SoftVersion + "/Accounts/" + self.AccountSid + "/Calls/VoiceVerify?sig=" + sig + #生成auth + src = self.AccountSid + ":" + self.Batch; + auth = base64.encodestring(src).strip() + req = urllib2.Request(url) + self.setHttpHeader(req) + + req.add_header("Authorization", auth) + + #创建包体 + body ='''\ + %s%s%s%s%s\ + %s\ + '''%(self.AppId,verifyCode,playTimes,to,respUrl,displayNum) + if self.BodyType == 'json': + # if this model is Json ..then do next code + body = '''{"appId": "%s", "verifyCode": "%s","playTimes": "%s","to": "%s","respUrl": "%s","displayNum": "%s"}'''%(self.AppId,verifyCode,playTimes,to,respUrl,displayNum) + req.add_data(body) + data='' + try: + res = urllib2.urlopen(req); + data = res.read() + res.close() + + if self.BodyType=='json': + #json格式 + locations = json.loads(data) + else: + #xml格式 + xtj=xmltojson() + locations=xtj.main(data) + if self.Iflog: + self.log(url,body,data) + return locations + except Exception, error: + if self.Iflog: + self.log(url,body,data) + return {'172001':'网络错误'} + + # IVR外呼 + # @param number 必选参数 待呼叫号码,为Dial节点的属性 + # @param userdata 可选参数 用户数据,在通知中返回,只允许填写数字字符,为Dial节点的属性 + # @param record 可选参数 是否录音,可填项为true和false,默认值为false不录音,为Dial节点的属性 + + def ivrDial(self,number,userdata,record): + + self.accAuth() + nowdate = datetime.datetime.now() + self.Batch = nowdate.strftime("%Y%m%d%H%M%S") + #生成sig + signature = self.AccountSid + self.AccountToken + self.Batch; + sig = md5.new(signature).hexdigest().upper() + #拼接URL + url = "https://"+self.ServerIP + ":" + self.ServerPort + "/" + self.SoftVersion + "/Accounts/" + self.AccountSid + "/ivr/dial?sig=" + sig + #生成auth + src = self.AccountSid + ":" + self.Batch; + auth = base64.encodestring(src).strip() + req = urllib2.Request(url) + req.add_header("Accept", "application/xml") + req.add_header("Content-Type", "application/xml;charset=utf-8") + req.add_header("Authorization", auth) + + #创建包体 + body =''' + + %s + + + '''%(self.AppId,number,userdata,record) + req.add_data(body) + data='' + try: + res = urllib2.urlopen(req); + data = res.read() + res.close() + xtj=xmltojson() + locations=xtj.main(data) + if self.Iflog: + self.log(url,body,data) + return locations + except Exception, error: + if self.Iflog: + self.log(url,body,data) + return {'172001':'网络错误'} + + + # 话单下载 + # @param date 必选参数 day 代表前一天的数据(从00:00 – 23:59);week代表前一周的数据(周一 到周日);month表示上一个月的数据(上个月表示当前月减1,如果今天是4月10号,则查询结果是3月份的数据) + # @param keywords 可选参数 客户的查询条件,由客户自行定义并提供给云通讯平台。默认不填忽略此参数 + def billRecords(self,date,keywords): + + self.accAuth() + nowdate = datetime.datetime.now() + self.Batch = nowdate.strftime("%Y%m%d%H%M%S") + #生成sig + signature = self.AccountSid + self.AccountToken + self.Batch; + sig = md5.new(signature).hexdigest().upper() + #拼接URL + url = "https://"+self.ServerIP + ":" + self.ServerPort + "/" + self.SoftVersion + "/Accounts/" + self.AccountSid + "/BillRecords?sig=" + sig + #生成auth + src = self.AccountSid + ":" + self.Batch; + auth = base64.encodestring(src).strip() + req = urllib2.Request(url) + self.setHttpHeader(req) + req.add_header("Authorization", auth) + + #创建包体 + body ='''\ + %s%s%s\ + \ + '''%(self.AppId,date,keywords) + if self.BodyType == 'json': + # if this model is Json ..then do next code + body = '''{"appId": "%s", "date": "%s","keywords": "%s"}'''%(self.AppId,date,keywords) + req.add_data(body) + data='' + try: + res = urllib2.urlopen(req); + data = res.read() + + res.close() + + if self.BodyType=='json': + #json格式 + locations = json.loads(data) + else: + #xml格式 + xtj=xmltojson() + locations=xtj.main(data) + if self.Iflog: + self.log(url,body,data) + return locations + except Exception, error: + if self.Iflog: + self.log(url,body,data) + return {'172001':'网络错误'} + + # 主帐号信息查询 + + def queryAccountInfo(self): + + self.accAuth() + nowdate = datetime.datetime.now() + self.Batch = nowdate.strftime("%Y%m%d%H%M%S") + #生成sig + signature = self.AccountSid + self.AccountToken + self.Batch; + sig = md5.new(signature).hexdigest().upper() + #拼接URL + url = "https://"+self.ServerIP + ":" + self.ServerPort + "/" + self.SoftVersion + "/Accounts/" + self.AccountSid + "/AccountInfo?sig=" + sig + #生成auth + src = self.AccountSid + ":" + self.Batch; + auth = base64.encodestring(src).strip() + req = urllib2.Request(url) + self.setHttpHeader(req) + body='' + req.add_header("Authorization", auth) + data='' + try: + res = urllib2.urlopen(req); + data = res.read() + res.close() + + if self.BodyType=='json': + #json格式 + locations = json.loads(data) + else: + #xml格式 + xtj=xmltojson() + locations=xtj.main(data) + if self.Iflog: + self.log(url,body,data) + return locations + except Exception, error: + if self.Iflog: + self.log(url,body,data) + return {'172001':'网络错误'} + + #子帐号鉴权 + def subAuth(self): + if(self.ServerIP==""): + print('172004'); + print('IP为空'); + + if(self.ServerPort<=0): + print('172005'); + print('端口错误(小于等于0)'); + + if(self.SoftVersion==""): + print('172013'); + print('版本号为空'); + + if(self.SubAccountSid==""): + print('172008'); + print('子帐号为空'); + + if(self.SubAccountToken==""): + print('172009'); + print('子帐号令牌为空'); + + if(self.AppId==""): + print('172012'); + print('应用ID为空'); + + #主帐号鉴权 + def accAuth(self): + if(self.ServerIP==""): + print('172004'); + print('IP为空'); + + if(self.ServerPort<=0): + print('172005'); + print('端口错误(小于等于0)'); + + if(self.SoftVersion==""): + print('172013'); + print('版本号为空'); + + if(self.AccountSid==""): + print('172006'); + print('主帐号为空'); + + if(self.AccountToken==""): + print('172007'); + print('主帐号令牌为空'); + + if(self.AppId==""): + print('172012'); + print('应用ID为空'); + + + + #设置包头 + def setHttpHeader(self,req): + if self.BodyType == 'json': + req.add_header("Accept", "application/json") + req.add_header("Content-Type", "application/json;charset=utf-8") + + else: + req.add_header("Accept", "application/xml") + req.add_header("Content-Type", "application/xml;charset=utf-8") + \ No newline at end of file diff --git a/code/handler/CHRequestHandler.py b/code/handler/CHRequestHandler.py new file mode 100644 index 0000000..89c3125 --- /dev/null +++ b/code/handler/CHRequestHandler.py @@ -0,0 +1,41 @@ +__author__ = 'Administrator' + +import tornado.web +import json + +class NoUserException(Exception): + def __init__(self): + pass + +class LackParamsException(Exception): + def __init__(self): + pass + +class CHRequestHandler(tornado.web.RequestHandler): + def getUserId(self, username): + record = self.application.dbapi.getUserByUserName(username) + if record is None: + raise NoUserException() + return record["id"] + + def getParams(self, essentials = []): + j = json.loads(self.request.body) + for k in essentials: + if not j.has_key(k): + raise LackParamsException() + return j + + def writeError(self, error_code, apiname): + error = { + "result": "error", + "request": apiname, + "error_code": error_code + } + self.write(json.dumps(error)) + + def writeOK(self): + result = { + "result": "ok" + } + self.write(result) + diff --git a/code/handler/xmltojson.py b/code/handler/xmltojson.py new file mode 100644 index 0000000..6c5336a --- /dev/null +++ b/code/handler/xmltojson.py @@ -0,0 +1,134 @@ +# -*- coding: utf-8 -*- +#python xml.etree.ElementTree + +import os +import xml.etree.ElementTree as ET +from xml.dom import minidom + +class xmltojson: + #global var + #show log + SHOW_LOG = True + #XML file + XML_PATH = None + a={} + m=[] + + def get_root(self,path): + '''parse the XML file,and get the tree of the XML file + finally,return the root element of the tree. + if the XML file dose not exist,then print the information''' + #if os.path.exists(path): + #if SHOW_LOG: + #print('start to parse the file : [{}]'.format(path)) + tree = ET.fromstring(path) + return tree + #else: + #print('the path [{}] dose not exist!'.format(path)) + + def get_element_tag(self,element): + '''return the element tag if the element is not None.''' + if element is not None: + + return element.tag + else: + print('the element is None!') + + def get_element_attrib(self,element): + '''return the element attrib if the element is not None.''' + if element is not None: + + return element.attrib + else: + print('the element is None!') + + def get_element_text(self,element): + '''return the text of the element.''' + if element is not None: + return element.text + else: + print('the element is None!') + + def get_element_children(self,element): + '''return the element children if the element is not None.''' + if element is not None: + + return [c for c in element] + else: + print('the element is None!') + + def get_elements_tag(self,elements): + '''return the list of tags of element's tag''' + if elements is not None: + tags = [] + for e in elements: + tags.append(e.tag) + return tags + else: + print('the elements is None!') + + def get_elements_attrib(self,elements): + '''return the list of attribs of element's attrib''' + if elements is not None: + attribs = [] + for a in elements: + attribs.append(a.attrib) + return attribs + else: + print('the elements is None!') + + def get_elements_text(self,elements): + '''return the dict of element''' + if elements is not None: + text = [] + for t in elements: + text.append(t.text) + return dict(zip(self.get_elements_tag(elements), text)) + else: + print('the elements is None!') + + + + def main(self,xml): + + #root + root = self.get_root(xml) + + #children + children = self.get_element_children(root) + + children_tags = self.get_elements_tag(children) + + children_attribs = self.get_elements_attrib(children) + + i=0 + + #获取二级元素的每一个子节点的名称和值 + for c in children: + p=0 + c_children = self.get_element_children(c) + dict_text = self.get_elements_text(c_children) + if dict_text : + if children_tags[i] =='TemplateSMS': + self.a['templateSMS']=dict_text + else : + if children_tags[i]=='SubAccount': + k=0 + + for x in children: + if children_tags[k]=='totalCount': + self.m.append(dict_text) + self.a['SubAccount']=self.m + p=1 + k=k+1 + if p==0: + self.a[children_tags[i]]=dict_text + else: + self.a[children_tags[i]]=dict_text + + + else: + self.a[children_tags[i]]=c.text + i=i+1 + return self.a + diff --git a/code/main.py b/code/main.py index fb8d50d..1e99d44 100644 --- a/code/main.py +++ b/code/main.py @@ -58,7 +58,9 @@ def __init__(self): (r"/api/authstate", Authorize.AuthStateHandler), (r"/api/requestemailauth", Authorize.RequestEmailAuthHandler), - (r"/api/authemail", Authorize.AuthEmailHandler)] + (r"/api/authemail", Authorize.AuthEmailHandler), + (r"/api/requestphoneauth", Authorize.RequestPhoneAuthHandler), + (r"/api/authphone", Authorize.AuthPhoneHandler)] tornado.web.Application.__init__(self,handlers,**settings) self.dbapi=dbapi.dbapi() self.util=util.util() diff --git a/db.sql b/db.sql index 892eb28..73f89d5 100644 --- a/db.sql +++ b/db.sql @@ -2,6 +2,7 @@ drop table IF EXISTS auth; drop table IF EXISTS previousEvent; drop table IF EXISTS email_code; +drop table IF EXISTS phone_code; drop table IF EXISTS auth_cnt; drop table IF EXISTS support; drop table IF EXISTS helper; @@ -223,8 +224,8 @@ CREATE TABLE auth ( /* 邮箱随机码表 id:用户标识 -email_code:随机码 -expire_in:过去时间 +code:随机码 +expire_in:过期时间 */ CREATE TABLE email_code ( id int NOT NULL, @@ -248,6 +249,20 @@ CREATE TABLE auth_cnt ( foreign key(id) references user(id) ON DELETE CASCADE ) DEFAULT CHARSET = utf8; +/* +手机验证码表 +id:用户标识 +code:验证码 +expire_in:过期时间 +*/ +CREATE TABLE phone_code ( + id int NOT NULL, + code varchar(6) NOT NULL, + expire_in int NOT NULL, + primary key(id), + foreign key(id) references user(id) ON DELETE CASCADE +) DEFAULT CHARSET = utf8; + /* 计算信誉度辅助表: askid:求助者id From f0ce371e5ea4189f978cd361e66fa67d55a53471 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 30 Jul 2014 10:08:28 +0800 Subject: [PATCH 57/66] add credit init --- code/handler/EventHandler.py | 32 ++++++-------------------------- code/handler/UserInfoHandler.py | 4 ++-- code/util.py | 15 +++++++++------ 3 files changed, 17 insertions(+), 34 deletions(-) diff --git a/code/handler/EventHandler.py b/code/handler/EventHandler.py index de23261..0297336 100644 --- a/code/handler/EventHandler.py +++ b/code/handler/EventHandler.py @@ -160,9 +160,13 @@ def post(self): #content='{"eventid":1,"credits":[{"username":"test2","cridit":5},{"username":"test6","cridit":1}]}' jobj=json.loads(content) result=[] + event = self.application.dbapi.getEventByEventId(j['eventid']) + askuser = self.application.dbapi.getUserInfobyUid(event['usrid']) for issue in jobj["credits"]: - temp=self.application.dbapi.setCreditByEventIdAndUserName(jobj["eventid"],issue["username"],issue["cridit"]) - result.append({"helpername":issue["username"],"result":temp}); + temp = self.application.dbapi.setCreditByEventIdAndUserName(jobj["eventid"],issue["username"],issue["cridit"]) + result.append({"helpername":issue["username"],"result":temp}) + helper = self.application.dbapi.getUserInfobyName(issue['username']) + self.application.util.set(event,askuser,helper,issue["cridit"],self.application.dbapi) self.write(str(result)) class QuitaidHandler(tornado.web.RequestHandler): @@ -228,30 +232,6 @@ def get(self): def post(self): content =self.request.body content = '{"eventid": 3,"video": "ssssssssssssssss","audio":"ddddd"}' - """#content = '{"username": "ooo","eventid": 3,"video": "ssssssssssssssss","audio":""}' - j = json.loads(content) - us = self.application.dbapi.getUserByUserName(j['username']) - if(us is None): - self.write("{'state':1}") - print "username not exist" - return - print us["id"] - - event = self.application.dbapi.getEventByEventId(j['eventid']) - if(event is None): - self.write("{'state':2}") - print "event not exist" - return - if (event['state']==1): - self.write("{'state':3}") - print "event is end" - return - if(us["id"]==event["usrid"]): - self.application.dbapi.supportmessageinsert(j) - self.write("{'state':4}") - print "insert success" - return - return""" j = json.loads(content) if('video' in j): self.application.util.setVideobyEid(j['eid'],j['video']) diff --git a/code/handler/UserInfoHandler.py b/code/handler/UserInfoHandler.py index 197ee7d..40f1441 100644 --- a/code/handler/UserInfoHandler.py +++ b/code/handler/UserInfoHandler.py @@ -18,8 +18,8 @@ def post(self): self.write("{'state':1}") print "username not exist" return - if('avatar' in j['changemessage']): - self.application.util.setAvatar(j['username'],j['changemessage']['avatar'],self.application.dbapi) + if('avatar' in j): + self.application.util.setAvatar(j['username'],j['avatar'],self.application.dbapi) result = self.application.dbapi.updateUserinfo(user['id'],j['changemessage']) if(isinstance(result,list)): state = 1 diff --git a/code/util.py b/code/util.py index 719da82..8f9e758 100644 --- a/code/util.py +++ b/code/util.py @@ -19,7 +19,7 @@ def __init__(self): def setAvatar(self,username,filestring,dbapi): print "Start set Avatar" userid=dbapi.getUserByUserName(username)['id'] - avatar=open(os.path.abspath('./static/avatar/'+str(userid)+".png"),"wb"); + avatar=open(os.path.abspath('./static/avatar/'+str(userid)+".png"),"wb") avatar.write(base64.standard_b64decode(filestring)) avatar.close() print "End set Avatar" @@ -27,7 +27,7 @@ def setAvatar(self,username,filestring,dbapi): def getAvatar(self,username,dbapi): print "Start get Avatar" userid=dbapi.getUserByUserName(username)['id'] - avatar=open(os.path.abspath('./static/avatar/'+str(userid)+".png"),"rb"); + avatar=open(os.path.abspath('./static/avatar/'+str(userid)+".png"),"rb") result="" result=base64.standard_b64encode(avatar.read()) avatar.close() @@ -36,14 +36,14 @@ def getAvatar(self,username,dbapi): def setAvatarbyUid(self,uid,filestring): print "Start set Avatar" - avatar=open(os.path.abspath('./static/avatar/'+str(uid)+".png"),"wb"); + avatar=open(os.path.abspath('./static/avatar/'+str(uid)+".png"),"wb") avatar.write(base64.standard_b64decode(filestring)) avatar.close() print "End set Avatar" def getAvatarbyUid(self,uid): print "Start get Avatar" - avatar=open(os.path.abspath('./static/avatar/'+str(uid)+".png"),"rb"); + avatar=open(os.path.abspath('./static/avatar/'+str(uid)+".png"),"rb") result="" result=base64.standard_b64encode(avatar.read()) avatar.close() @@ -53,7 +53,7 @@ def getAvatarbyUid(self,uid): def setVideobyEid(self,uid,videostring): newdir = raw_input('./static/Video/'+str(uid)) os.mkdir(newdir) - video=open(os.path.abspath('./static/Video/'+str(uid)+'/'+str(uid)+'.3gp'),"wb"); + video=open(os.path.abspath('./static/Video/'+str(uid)+'/'+str(uid)+'.3gp'),"wb") video.write(base64.standard_b64decode(videostring)) video.close() print "set Video success" @@ -61,7 +61,10 @@ def setVideobyEid(self,uid,videostring): def setAudiobyEid(self,uid,videostring): newdir = raw_input('./static/Audio/'+str(uid)) os.mkdir(newdir) - audio=open(os.path.abspath('./static/Audio/'+str(uid)+'/'+str(uid)+'.amr'),"wb"); + audio=open(os.path.abspath('./static/Audio/'+str(uid)+'/'+str(uid)+'.amr'),"wb") audio.write(base64.standard_b64decode(videostring)) audio.close() print "set Audio success" + + def setCredictforHelper(self,event,askuser,helper,credit,dbapi): + pass From 6b3d4e5ff5258b5f65212780a3904f35c6adfe0b Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 30 Jul 2014 11:46:12 +0800 Subject: [PATCH 58/66] add previousEvent table handle --- code/dbapi.py | 54 +++++++++++++++++++++++++++++++++++-- code/handler/Authorize.py | 2 ++ code/handler/UserHandler.py | 7 +++-- db.sql | 2 +- 4 files changed, 58 insertions(+), 7 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 46f9ca5..3127cb3 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -10,8 +10,8 @@ class dbapi: def __init__(self): self.host="localhost" - self.user="comhelp" - self.passwd="20140629" + #self.user="comhelp" + #self.passwd="20140629" self.user="root" self.passwd="root" self.dbname="community" @@ -55,6 +55,18 @@ def updateUserstate(self,uid,state): cursor.close() return + def updateUserCredit(self,uid,credit): + cursor = self.db.cursor() + sql = "update info set credit = %s where id = %s" + param = (credit,uid) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + cursor.close() + return + def updateUseLBS(self,latitude,longitude,uid): cursor = self.db.cursor() sql = "update info set latitude = %s , longitude = %s where id = %s" @@ -820,6 +832,44 @@ def getSupportsByEventId(self,eid): result.append(item) return result + #get record from previousEvent + #after:return None or dict + def getpreviousEvent(self,askid,helperid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select * from previousEvent where askid=%s and helperid = %s" + param=(askid,helperid) + cursor.execute(sql,param) + result = cursor.fetchone() + return result + + #insert new record into previousEvent + #after:the table insert a new record + def insertpreviousEvent(self,askid,helperid,credit,eventstarttime): + cursor = self.db.cursor() + sql = "insert into previousEvent(askid,helperid,time,credit) values(%s,%s,%s,%s)" + param = (askid,helperid,eventstarttime,credit) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + cursor.close() + return + + #update the record in previousEvent + #after:update the record of (askid,helpid) + def updatepreviousEvent(self,askid,helperid,credit,eventstarttime): + cursor = self.db.cursor() + sql = "update previousEvent set credit = %s, time = %s where askid = %s and helperid = %s" + param = (credit,eventstarttime,askid,helperid) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + cursor.close() + return + def insertAuth(self, uid): cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql = "insert into auth(id, email_state, phone_state) values(%s, 'unauth', 'unauth')" diff --git a/code/handler/Authorize.py b/code/handler/Authorize.py index 2ca5ea9..fc0ccc8 100644 --- a/code/handler/Authorize.py +++ b/code/handler/Authorize.py @@ -46,7 +46,9 @@ def post(self): self.application.dbapi.insertAuth(uid) auth_record = self.application.dbapi.getAuth(uid) result = { + "email": auth_record["email"], "email_state": auth_record["email_state"], + "phone": auth_record["phone"], "phone_state": auth_record["phone_state"] } print("mark 1") diff --git a/code/handler/UserHandler.py b/code/handler/UserHandler.py index 5f33b14..187fb48 100644 --- a/code/handler/UserHandler.py +++ b/code/handler/UserHandler.py @@ -104,10 +104,9 @@ def get(self): def post(self): #self.write("AuthenHandler") - username = "test1" - result = self.application.dbapi.getUserInfobyName(username) - print result['id'] - self.write(str(result)) + print "start" + print self.application.dbapi.getpreviousEvent(1,3) + print "lall" return diff --git a/db.sql b/db.sql index 73f89d5..12aa0b2 100644 --- a/db.sql +++ b/db.sql @@ -17,7 +17,7 @@ drop table IF EXISTS user; 用户表 id:自增id name:登录用户名 -kind:用户类型(普通用户,认证用户,第三方机构等) +kind:用户类型(普通用户1,志愿者2,小区保安3,安全机构4,医疗机构5,其它机构6等) password:用户密码(md5加密) cid:推送令牌 state:在线状态0-不在线,1-表示在线 From 3b7ff42fbadbd5a33d47a90cd86870f632acde8e Mon Sep 17 00:00:00 2001 From: Anton Date: Wed, 30 Jul 2014 11:51:51 +0800 Subject: [PATCH 59/66] adjust code layout --- code/dbapi.py | 8 ++--- code/score.py | 85 ++++++++++++++++++++++++++++++++++++++++++++++++ code/util.py | 90 ++------------------------------------------------- db.sql | 39 +++++++++++++++++++++- 4 files changed, 129 insertions(+), 93 deletions(-) create mode 100644 code/score.py diff --git a/code/dbapi.py b/code/dbapi.py index e397104..ea39c06 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -70,7 +70,7 @@ def updateUseLBS(self,latitude,longitude,uid): def getUserAllinfobyName(self,name): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) uid = self.getUserByUserName(name)['id'] - return self.getUsermassegeByUserId(uid) + return self.getUsermessegeByUserId(uid) #get user all info in user+info #pre con: user exist @@ -93,7 +93,7 @@ def CheckRelationbyId(self,userid): cursor.close() return result - def getUsermassegeByUserId(self,userid): + def getUsermessegeByUserId(self,userid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) sql="select user.id,user.name,info.name as realname,info.sex,info.age,info.address,info.illness,info.credit,info.score,phone from user,info where user.id=%s and info.id=%s" param=(userid,userid) @@ -294,7 +294,7 @@ def register(self,content): self.db.commit() cursor.close() - return + return result[0] def getRelationByUserId(self, u_id, r_id): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) @@ -939,7 +939,7 @@ def operateScoreById(self,uid,score_op): sql = "update info set score = score+%s where id = %s" else: sql = "update info set score = score-%s where id = %s" - param = (score_op,uid) + param = (abs(score_op),uid) cursor.execute(sql,param) self.db.commit() cursor.close() diff --git a/code/score.py b/code/score.py new file mode 100644 index 0000000..d1ff7db --- /dev/null +++ b/code/score.py @@ -0,0 +1,85 @@ +import xml.etree.ElementTree as ET +class score: + def __init__(self): + self.config=dict() + _config=ET.parse(os.path.abspath("./static/config.xml")) + root=_config.getroot() + levels=root.findall("./score/level") + for level in levels: + num=int(level[0].text) + minScore=int(level[1].text) + maxScore=int(level[2].text) + + self.config[num]=dict() + self.config[num]['min']=minScore + self.config[num]['max']=maxScore + + def getRankByScore(self,s): + for num in self.config: + if s<=self.config[num]['max'] and s>=self.config[num]['min']: + result=dict() + result['scoreMin']=self.config[num]['min'] + result['scoreMax']=self.config[num]['max'] + result['scoreLevel']=num + return result + print "error in getRankByScore("+str(s)+")" + + # 1:new user login for the first time +5/5 + # 2:user login for the first time every day +1/1 + # 3:caller give helper credit +2/50 + # 4:helper join in support +3/Infinity + # 5:helper send support message +1/30 + # 6:user online for more than 12 hours a day +2/2 + + # 7:helper earn the highest credit in a event +5/Infinity + # allow more than one helper earn it in the same event + + # 8:send harmful support message -10/Infinity + # 9:send useless event message -20/Infinity + # 10:helper quit the event while the event does not end -1/Infinity + # 11:caller give no credit to the helper after the event end for five days -10/infinity + + def updateScoreByCase(self,uid,cond,dbapi): + def func1(u,d): + d.operateScoreById(u,5) + print "func1" + def func2(u,d): + d.operateScoreById(u,1) + print "func2" + def func3(u,d): + d.operateScoreById(u,2) + print "func3" + def func4(u,d): + d.operateScoreById(u,3) + print "func4" + def func5(u,d): + d.operateScoreById(u,1) + print "func5" + def func6(u,d): + d.operateScoreById(u,2) + print "func6" + def func7(u,d): + d.operateScoreById(u,5) + print "func7" + def func8(u,d): + d.operateScoreById(u,-10) + print "func8" + def func9(u,d): + d.operateScoreById(u,-20) + print "func9" + def func10(u,d): + d.operateScoreById(u,-1) + print "func10" + def func11(u,d): + d.operateScoreById(u,-10) + print "func11" + + if cond>=1 and cond<=11: + funcName="func"+str(cond) + (eval(funcName))(uid,dbapi) + else: + print "arguments incorrect" + +if __name__ == '__main__': + test=util() + print test.getRankByScore(700) \ No newline at end of file diff --git a/code/util.py b/code/util.py index c95453d..464678a 100644 --- a/code/util.py +++ b/code/util.py @@ -1,21 +1,5 @@ -import json,os,base64,dbapi -import xml.etree.ElementTree as ET +import json,os,base64 class util: - def __init__(self): - self.score=dict() - config=ET.parse(os.path.abspath("./static/config.xml")) - root=config.getroot() - levels=root.findall("./score/level") - for level in levels: - num=int(level[0].text) - minScore=int(level[1].text) - maxScore=int(level[2].text) - - self.score[num]=dict() - self.score[num]['min']=minScore - self.score[num]['max']=maxScore - - def setAvatar(self,username,filestring,dbapi): print "Start set Avatar" userid=dbapi.getUserByUserName(username)['id'] @@ -65,74 +49,4 @@ def setAudiobyEid(self,uid,videostring): audio.write(base64.standard_b64decode(videostring)) audio.close() print "set Audio success" - - def getRankByScore(self,s): - for num in self.score: - if s<=self.score[num]['max'] and s>=self.score[num]['min']: - result=dict() - result['scoreMin']=self.score[num]['min'] - result['scoreMax']=self.score[num]['max'] - result['scoreLevel']=num - return result - print "error in getRankByScore("+str(s)+")" - - # 1:new user login for the first time +5/5 - # 2:user login for the first time every day +1/1 - # 3:caller give helper credit +2/50 - # 4:helper join in support +3/Infinity - # 5:helper send support message +1/30 - # 6:user online for more than 12 hours a day +2/2 - - # 7:helper earn the highest credit in a event +5/Infinity - # allow more than one helper earn it in the same event - - # 8:send harmful support message -10/Infinity - # 9:send useless event message -20/Infinity - # 10:helper quit the event while the event does not end -1/Infinity - # 11:caller give no credit to the helper after the event end for five days -10/infinity - - def updateScoreByCase(self,uid,cond,dbapi): - def func1(u,d): - d.operateScoreById(u,5) - print "func1" - def func2(u,d): - d.operateScoreById(u,1) - print "func2" - def func3(u,d): - d.operateScoreById(u,2) - print "func3" - def func4(u,d): - d.operateScoreById(u,3) - print "func4" - def func5(u,d): - d.operateScoreById(u,1) - print "func5" - def func6(u,d): - d.operateScoreById(u,2) - print "func6" - def func7(u,d): - d.operateScoreById(u,5) - print "func7" - def func8(u,d): - d.operateScoreById(u,-10) - print "func8" - def func9(u,d): - d.operateScoreById(u,-20) - print "func9" - def func10(u,d): - d.operateScoreById(u,-1) - print "func10" - def func11(u,d): - d.operateScoreById(u,-10) - print "func11" - - if cond>=1 and cond<=11: - funcName="func"+str(cond) - (eval(funcName))(uid) - else: - print "arguments incorrect" - -if __name__ == '__main__': - test=util() - db=dbapi.dbapi() - print test.getRankByScore(700) \ No newline at end of file + \ No newline at end of file diff --git a/db.sql b/db.sql index 393169c..ac3095e 100644 --- a/db.sql +++ b/db.sql @@ -1,4 +1,5 @@ -drop table IF EXISTS tpu; +drop event IF EXISTS init_score_info; +drop table IF EXISTS tpu; drop table IF EXISTS auth; drop table IF EXISTS email_code; drop table IF EXISTS auth_cnt; @@ -11,6 +12,7 @@ drop table IF EXISTS relation; drop table IF EXISTS info; drop table IF EXISTS user; +SET GLOBAL event_scheduler = 1; /* 用户表 id:自增id @@ -264,6 +266,41 @@ CREATE TABLE previousEvent( foreign key(helperid) references user(id) ) DEFAULT CHARSET = utf8; +/* +本日获得积分详情表: +每天将重置此表为默认值 +*/ +CREATE TABLE score_info( + id int NOT NULL, + login_time datetime, + score1 int DEFAULT 0, + score2 int DEFAULT 0, + score3 int DEFAULT 0, + score4 int DEFAULT 0, + score5 int DEFAULT 0, + score6 int DEFAULT 0, + score7 int DEFAULT 0, + score8 int DEFAULT 0, + score9 int DEFAULT 0, + score10 int DEFAULT 0, + score11 int DEFAULT 0, + primary key(id), + foreign key(id) references user(id) ON DELETE CASCADE ON UPDATE CASCADE, +) DEFAULT CHARSET = utf8; + +/* +更新积分详情表事件 +*/ +CREATE + PROCEDURE init_func () + BEGIN + UPDATE score_info SET login_time=TIMESTAMP('2000-01-01 00:00:00'); + END; +CREATE + EVENT IF NOT EXISTS init_score_info + ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP(CURRENT_DATE,'00:00:00') + ON COMPLETION PRESERVE + DO CALL init_func(); /* 添加6用户(3男3女): */ From 845f00d341f97beb66c0455e1970b5a21e9e2b68 Mon Sep 17 00:00:00 2001 From: Anton Date: Wed, 30 Jul 2014 16:22:34 +0800 Subject: [PATCH 60/66] add some easy functions --- code/dbapi.py | 47 +++++++++++++++++ code/main.py | 3 +- code/score.py | 115 ++++++++++++++++++++++++++--------------- code/static/config.xml | 71 ++++++++++++++++++++++++- db.sql | 19 ++++--- 5 files changed, 204 insertions(+), 51 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index ea39c06..899007c 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -944,5 +944,52 @@ def operateScoreById(self,uid,score_op): self.db.commit() cursor.close() + def addScoreInfoById(self,uid): + cursor = self.db.cursor() + sql = "insert into score_info(id,login_time) values(%s,%s)" + param = (uid,"2000-01-01 00:00:00") + cursor.execute(sql,param) + self.db.commit() + cursor.close() + + def operateScoreInfoById(self,uid,cond,score_op): + cursor = self.db.cursor() + if score_op > 0: + sql = "update score_info set score"+str(cond)+" = score"+str(cond)+"+%s where id = %s" + else: + sql = "update score_info set score"+str(cond)+" = score"+str(cond)+"-%s where id = %s" + param = (abs(score_op),uid) + cursor.execute(sql,param) + self.db.commit() + cursor.close() + + def getScoreInfoById(self,uid): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select * from score_op where id = %s" + param = (uid,) + cursor.execute(sql, param) + result = cursor.fetchone() + if result is None: + return None + else: + return result + + def setScoreTimeById(self,uid,curTime): + cursor = self.db.cursor() + sql = "update score_info set login_time = %s where id = %s" + param = (curTime,uid) + cursor.execute(sql,param) + self.db.commit() + cursor.close() + + def getGreatestHelperId(self,eid): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = "select usrid from helper where eid = %s and credit = max(select max(credit) from helper where eid = %s)" + param = (eid,eid) + cursor.execute(sql, param) + result = cursor.fetchall() + return result + + def __del__(self): self.db.close() \ No newline at end of file diff --git a/code/main.py b/code/main.py index fb8d50d..112a601 100644 --- a/code/main.py +++ b/code/main.py @@ -1,7 +1,7 @@ import tornado.ioloop import tornado.web import tornado.httpserver -import os,MySQLdb,dbapi,util +import os,MySQLdb,dbapi,util,score from handler import * from push import * from xml.dom.minidom import parse,parseString @@ -63,6 +63,7 @@ def __init__(self): self.dbapi=dbapi.dbapi() self.util=util.util() self.push = Push() + self.score=score.score() if __name__=="__main__": diff --git a/code/score.py b/code/score.py index d1ff7db..73c050f 100644 --- a/code/score.py +++ b/code/score.py @@ -1,22 +1,36 @@ -import xml.etree.ElementTree as ET +import os,xml.etree.ElementTree as ET +from time import * class score: def __init__(self): - self.config=dict() _config=ET.parse(os.path.abspath("./static/config.xml")) root=_config.getroot() levels=root.findall("./score/level") + ops=root.findall("./ops/op") + + self.config=dict() for level in levels: num=int(level[0].text) minScore=int(level[1].text) - maxScore=int(level[2].text) + maxScore="INF" if level[2].text=="INF" else int(level[2].text) + self.config[num]=dict() self.config[num]['min']=minScore self.config[num]['max']=maxScore + self.ops=dict() + for op in ops: + cond=int(op[0].text) + score_op=int(op[1].text) + score_max="INF" if op[2].text=="INF" else int(op[2].text) + + self.ops[cond]=dict() + self.ops[cond]['op']=score_op + self.ops[cond]['max']=score_max + def getRankByScore(self,s): for num in self.config: - if s<=self.config[num]['max'] and s>=self.config[num]['min']: + if (self.config[num]['max']=="INF" or s<=self.config[num]['max']) and s>=self.config[num]['min']: result=dict() result['scoreMin']=self.config[num]['min'] result['scoreMax']=self.config[num]['max'] @@ -40,46 +54,61 @@ def getRankByScore(self,s): # 11:caller give no credit to the helper after the event end for five days -10/infinity def updateScoreByCase(self,uid,cond,dbapi): - def func1(u,d): - d.operateScoreById(u,5) - print "func1" - def func2(u,d): - d.operateScoreById(u,1) - print "func2" - def func3(u,d): - d.operateScoreById(u,2) - print "func3" - def func4(u,d): - d.operateScoreById(u,3) - print "func4" - def func5(u,d): - d.operateScoreById(u,1) - print "func5" - def func6(u,d): - d.operateScoreById(u,2) - print "func6" - def func7(u,d): - d.operateScoreById(u,5) - print "func7" - def func8(u,d): - d.operateScoreById(u,-10) - print "func8" - def func9(u,d): - d.operateScoreById(u,-20) - print "func9" - def func10(u,d): - d.operateScoreById(u,-1) - print "func10" - def func11(u,d): - d.operateScoreById(u,-10) - print "func11" - - if cond>=1 and cond<=11: - funcName="func"+str(cond) - (eval(funcName))(uid,dbapi) + if cond in self.ops: + info = dbapi.getScoreInfoById(uid) + score_op = self.ops[cond]["op"] + if info is not None: + name = "score"+str(cond) + if self.ops[cond]["max"]=="INF": + dbapi.operateScoreById(uid,score_op) + dbapi.operateScoreInfoById(uid,cond,score_op) + elif abs(info[name]+self.ops[cond]["op"]) <= abs(self.ops[cond]["max"]): + dbapi.operateScoreById(uid,self.ops[cond]["op"]) + dbapi.operateScoreInfoById(uid,cond,score_op) + else: + return False + return True + else: + return False + + def userRegister(self,uid,dbapi): + return self.updateScoreByCase(uid,1,dbapi) + + def userLogin(self,uid,dbapi): + info = dbapi.getScoreInfoById(uid) + if info is not None: + if info['login_time'].strftime("%Y-%m-%d %H:%M:%S") == "2000-01-01 00:00:00": + dbpai.setScoreTimeById(uid,time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))) + return self.updateScoreByCase(uid,2,dbapi) + else: + return False else: - print "arguments incorrect" + return False + + def giveCredit(self,uid,eid,dbapi): + self.updateScoreByCase(uid,3,dbapi) + + #condition 7 + helpers = dbapi.getGreatestHelperId(eid) + for helper in helpers: + self.updateScoreByCase(helper['usrid'],7,dbapi) + + + def joinSupport(self,uid,dbapi): + return self.updateScoreByCase(uid,4,dbapi) + + def sendSupport(self,uid,dbapi): + return self.updateScoreByCase(uid,5,dbapi) + + def checkOnlineHours(self,uid,dbapi): + info = dbapi.getScoreInfoById(uid) + if info is not None: + if (time.localtime(time.time()) - info['login_time']).hours() >= 12: + return return self.updateScoreByCase(uid,6,dbapi) + + def quitSupport(self,uid,dbapi): + return self.updateScoreByCase(uid,10,dbapi) if __name__ == '__main__': - test=util() + test=score() print test.getRankByScore(700) \ No newline at end of file diff --git a/code/static/config.xml b/code/static/config.xml index 1ad0a7c..99a7f4f 100644 --- a/code/static/config.xml +++ b/code/static/config.xml @@ -1,4 +1,5 @@ + @@ -49,7 +50,75 @@ 10 6001 - 300000 + INF + + + 1 + 5 + 5 + new user register + + + 2 + 1 + 1 + user login for the first time every day + + + 3 + 2 + 50 + user give helper credit + + + 4 + 3 + INF + helper join in support + + + 5 + 1 + 30 + helper send support message + + + 6 + 2 + 2 + user online for more than 12 hours in a day + + + 7 + 5 + INF + helper earn the highest credit in a event(allow more than one helper earn it in the same event) + + + 8 + -10 + INF + send harmful support message + + + 9 + -20 + INF + send useless event message + + + 10 + -1 + INF + helper quit the event while the event does not end + + + 11 + -10 + INF + caller give no credit to the helper after the event end for five days + + \ No newline at end of file diff --git a/db.sql b/db.sql index ac3095e..1590831 100644 --- a/db.sql +++ b/db.sql @@ -1,4 +1,7 @@ drop event IF EXISTS init_score_info; +drop procedure IF EXISTS init_func; +drop table IF EXISTS score_info; +drop table IF EXISTS previousEvent; drop table IF EXISTS tpu; drop table IF EXISTS auth; drop table IF EXISTS email_code; @@ -272,7 +275,7 @@ CREATE TABLE previousEvent( */ CREATE TABLE score_info( id int NOT NULL, - login_time datetime, + login_time datetime NOT NULL, score1 int DEFAULT 0, score2 int DEFAULT 0, score3 int DEFAULT 0, @@ -285,20 +288,24 @@ CREATE TABLE score_info( score10 int DEFAULT 0, score11 int DEFAULT 0, primary key(id), - foreign key(id) references user(id) ON DELETE CASCADE ON UPDATE CASCADE, + foreign key(id) references user(id) ON DELETE CASCADE ON UPDATE CASCADE ) DEFAULT CHARSET = utf8; /* 更新积分详情表事件 */ +delimiter // CREATE - PROCEDURE init_func () + PROCEDURE init_func() BEGIN - UPDATE score_info SET login_time=TIMESTAMP('2000-01-01 00:00:00'); - END; + UPDATE score_info SET login_time=TIMESTAMP('2000-01-01 00:00:00'), score1=0, score2=0, score3=0, score4=0, score5=0, score6=0, score7=0, score8=0, score9=0, score10=0, score11=0; + END// + +delimiter ; + CREATE EVENT IF NOT EXISTS init_score_info - ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP(CURRENT_DATE,'00:00:00') + ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP(CONCAT(CURRENT_DATE,'00:00:00')) ON COMPLETION PRESERVE DO CALL init_func(); /* From 6bf8a1257c6d6bc2254ccac0288304caa6e80ede Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Thu, 31 Jul 2014 09:04:05 +0800 Subject: [PATCH 61/66] change relation progess --- code/dbapi.py | 50 +++++++++++++++++++++++--------- code/handler/RelativesHandler.py | 32 ++++++++++++++++---- code/handler/UserHandler.py | 3 +- code/main.py | 1 + db.sql | 27 +++++++++-------- 5 files changed, 79 insertions(+), 34 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 3127cb3..4ac6512 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -309,8 +309,8 @@ def register(self,content): result=cursor.fetchone() print result[0] - sql = "insert into info(id,cardid,name,sex,age,address,illness,credit,score,phone,vocation) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" - param = (result[0],content["cardid"],content["realname"],content["sex"],content["age"],content["address"],content["illness"],0,0,content["phone"],content["vocation"]) + sql = "insert into info(id,cardid,name,sex,age,illness,credit,score,phone,vocation) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" + param = (result[0],content["cardid"],content["realname"],content["sex"],content["age"],content["illness"],0,0,content["phone"],content["vocation"]) cursor.execute(sql,param) self.db.commit() @@ -561,30 +561,52 @@ def addRelationByUid(self, u_id, r_id,kind): cursor.close() - def addtempRelationByUsername(self, u_name, r_name,kind): + def addtempRelationByUsername(self, u_name, r_name,kind,info): result = self.getUserByUserName(u_name) u_id = str(result["id"]) result = self.getUserByUserName(r_name) r_id = str(result["id"]) cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="INSERT INTO temprelation (uid, cid, kind) VALUES ('" + u_id + "', '" + r_id + "', '"+kind+"')" - cursor.execute(sql) - self.db.commit() + sql="INSERT INTO temprelation (uid, cid, kind,info) VALUES(%s,%s,%s,%s)" + param=(u_id,r_id,kind,info) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() cursor.close() def deletetemprelation(self,uid,cid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="select * from temprelation where uid = %s and cid =%s" - param=(uid,cid) - cursor.execute(sql,param) - result=cursor.fetchone() - kind = result['kind'] sql="delete from temprelation where uid = %s and cid =%s" param=(uid,cid) - cursor.execute(sql,param) - self.db.commit() + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() cursor.close() - return kind + return + + def deletetemprelationwithkind(self,uid,cid,kind): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="delete from temprelation where uid = %s and cid =%s and kind = %s" + param=(uid,cid,kind) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + cursor.close() + return + + def gettemprelationbyCid(self,cid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select * from temprelation where cid =%s" + param=(cid,) + cursor.execute(sql,param) + result = cursor.fetchall() + return list(result) def addaidhelper(self, u_name, e_id): result = self.getUserByUserName(u_name) diff --git a/code/handler/RelativesHandler.py b/code/handler/RelativesHandler.py index 87ee1f5..87f27a5 100644 --- a/code/handler/RelativesHandler.py +++ b/code/handler/RelativesHandler.py @@ -18,7 +18,7 @@ def post(self): j = json.loads(content) row = self.application.dbapi.getRelationByUsername(j['u_name'], j['r_name']) if row == 0: - self.application.dbapi.addtempRelationByUsername(j['u_name'], j['r_name'],j['kind']) + self.application.dbapi.addtempRelationByUsername(j['u_name'], j['r_name'],j['kind'],j['info']) #push data cid = self.application.dbapi.getUserByUserName(j['r_name'])['cid'] pushdata = {} @@ -94,20 +94,42 @@ def post(self): user = self.application.dbapi.getUserByUserName(j['u_name']) cid = self.application.dbapi.getUserByUserName(j['c_name'])['id'] if(j['agree'] == "1"): - kind = self.application.dbapi.deletetemprelation(user['id'],cid) - self.application.dbapi.addRelationByUid(user['id'],cid,kind) + self.application.dbapi.deletetemprelation(user['id'],cid) + self.application.dbapi.addRelationByUid(user['id'],cid,j['kind']) print "agree 1" pushdata = {} pushdata['type'] = "agree" data = {} data['userid'] = user['id'] data['username'] = user['name'] - data['type'] = kind + data['type'] = j['kind'] self.application.push.pushToSingle(user['cid'],json_encode(pushdata)) state = {'state':1} else: - self.application.dbapi.deletetemprelation(user['id'],cid) + self.application.dbapi.deletetemprelationwithkind(user['id'],cid,j['kind']) print "agree 0" state = {'state':1} self.write(json_encode(state)) + return + +class ValidationHandler(tornado.web.RequestHandler): + def get(self): + self.write("

ValidationHandler

") + + def post(self): + content =self.request.body + #content = '{"username":"test6"}' + j = json.loads(content) + user = self.application.dbapi.getUserByUserName(j['username']) + validations = self.application.dbapi.gettemprelationbyCid(user['id']) + result={} + if len(validations): + result['state'] = 1 + for item in validations: + print item + item['u_name'] = self.application.dbapi.getUserByUserId(item['uid'])['name'] + else: + result['state'] = 0 + result['validations'] = validations + self.write(json_encode(result)) return \ No newline at end of file diff --git a/code/handler/UserHandler.py b/code/handler/UserHandler.py index 187fb48..4484d94 100644 --- a/code/handler/UserHandler.py +++ b/code/handler/UserHandler.py @@ -105,7 +105,8 @@ def get(self): def post(self): #self.write("AuthenHandler") print "start" - print self.application.dbapi.getpreviousEvent(1,3) + print self.application.dbapi.gettemprelationbyCid(6) + #self.application.dbapi.addtempRelationByUsername("test2","test6",1,"lall") print "lall" return diff --git a/code/main.py b/code/main.py index 1e99d44..b05109c 100644 --- a/code/main.py +++ b/code/main.py @@ -31,6 +31,7 @@ def __init__(self): (r"/api/deleterelatives",RelativesHandler.DeleterelativesHandler), (r"/api/addrelatives",RelativesHandler.AddrelativesHandler), (r"/api/agreerelatives",RelativesHandler.AgreerelativesHandler), + (r"/api/getvalidation",RelativesHandler.ValidationHandler), (r"/api/history",HistoryHandler.HistoryHandler), diff --git a/db.sql b/db.sql index 12aa0b2..8f744fa 100644 --- a/db.sql +++ b/db.sql @@ -66,7 +66,7 @@ CREATE TABLE info latitude DECIMAL(12,7), longitude DECIMAL(12,7), primary key(id), - foreign key(id) references user(id) + foreign key(id) references user(id) ON DELETE CASCADE ON DELETE CASCADE )DEFAULT CHARSET=utf8; @@ -116,7 +116,7 @@ CREATE TABLE event starttime datetime, endtime datetime, primary key(id), - foreign key(usrid) references user(id) + foreign key(usrid) references user(id) ON DELETE CASCADE ON DELETE CASCADE )DEFAULT CHARSET=utf8; @@ -136,7 +136,7 @@ CREATE TABLE helper credit int, primary key(id), foreign key(eid) references event(id) ON DELETE CASCADE, - foreign key(usrid) references user(id) + foreign key(usrid) references user(id) ON DELETE CASCADE ON DELETE CASCADE )DEFAULT CHARSET=utf8; @@ -169,7 +169,7 @@ CREATE TABLE support time datetime, primary key(id), foreign key(eid) references event(id) ON DELETE CASCADE, - foreign key(usrid) references user(id) + foreign key(usrid) references user(id) ON DELETE CASCADE ON DELETE CASCADE )DEFAULT CHARSET=utf8; @@ -181,27 +181,26 @@ CREATE TABLE tpu id varchar(255) NOT NULL, usrid int NOT NULL, primary key(id), - foreign key(usrid) references user(id) + foreign key(usrid) references user(id) ON DELETE CASCADE ON DELETE CASCADE )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; /* 临时用户关系表 -id:自增id -uid:用户id +uid:请求者用户id oid:对应用户id kind:关系类型(关注好友,亲友等等) */ CREATE TABLE temprelation ( - id int NOT NULL AUTO_INCREMENT, uid int NOT NULL, cid int NOT NULL, kind int NOT NULL, - primary key(id), - foreign key(uid) references user(id), - foreign key(cid) references user(id) -)ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; + info varchar(100) DEFAULT "invite", + primary key(uid,cid,kind), + foreign key(uid) references user(id) ON DELETE CASCADE, + foreign key(cid) references user(id) ON DELETE CASCADE +)ENGINE=InnoDB DEFAULT CHARSET=utf8; /* 用户认证表 @@ -276,8 +275,8 @@ CREATE TABLE previousEvent( time datetime, credit double, primary key(askid, helperid), - foreign key(askid) references user(id), - foreign key(helperid) references user(id) + foreign key(askid) references user(id) ON DELETE CASCADE, + foreign key(helperid) references user(id) ON DELETE CASCADE ) DEFAULT CHARSET = utf8; /* From 84f6eba2ebee580570ad7daa498c2efa210fae0c Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Thu, 31 Jul 2014 09:04:29 +0800 Subject: [PATCH 62/66] fix authorize --- code/handler/Authorize.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/code/handler/Authorize.py b/code/handler/Authorize.py index fc0ccc8..0a68270 100644 --- a/code/handler/Authorize.py +++ b/code/handler/Authorize.py @@ -174,7 +174,7 @@ def post(self): period = 2 * 24 * 3600 self.application.dbapi.addEmailCode(uid, code, period) # update auth state - self.application.dbapi.updateAuthState(uid, "email", "authing"); + self.application.dbapi.updateAuthState(uid, "email", "authing") result = { "result": "OK" } @@ -287,6 +287,7 @@ def post(self): self.writeError(30003, "requestphoneauth") period = minutes * 60 self.application.dbapi.addPhoneCode(uid, code, period) + self.application.dbapi.updateAuthData(uid, "phone", phone) self.application.dbapi.updateAuthState(uid, "phone", "authing") self.writeOK() From 7dc112f6020640fefdf692694838f023a60d5ada Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Thu, 31 Jul 2014 09:04:53 +0800 Subject: [PATCH 63/66] fix history --- code/handler/EventHandler.py | 13 ++++++------- code/handler/HistoryHandler.py | 9 ++++++--- 2 files changed, 12 insertions(+), 10 deletions(-) diff --git a/code/handler/EventHandler.py b/code/handler/EventHandler.py index 0297336..1226b11 100644 --- a/code/handler/EventHandler.py +++ b/code/handler/EventHandler.py @@ -105,12 +105,12 @@ def post(self): #content = '{"username":"test1","eventid":1}' j = json.loads(content) user = self.application.dbapi.getUserByUserName(j['username']) - event = self.application.dbapi.getEventByEventId(j['eventid']) + event = self.application.dbapi.getEventandUserByEventId(j['eventid']) if(event is None): self.write("{'state':1}") print "event not exist" return - rNamelist = self.application.dbapi.getAllRelativeNamebyUid(event["usrid"]) + rNamelist = self.application.dbapi.getAllRelativeNamebyUid(event["userid"]) print rNamelist if(user["id"] not in rNamelist): self.write("{'state':2}") @@ -125,16 +125,14 @@ def post(self): info['uid'] = item['uid'] data.append(info) #data.append("{'username':" + str(item['username']) + ",'uid':"+ str(item['uid'])+"}") - print data writedata = {} writedata['state'] = 3 writedata['helpers'] = data - print writedata #push pushlist = self.application.dbapi.getFollowerCidByEid(j['eventid']) helperlist = self.application.dbapi.getHelpersCidbyEid(j['eventid']) pushlist.extend(helperlist) - relativelist = self.application.dbapi.getRelativesCidbyUid(user["id"]) + relativelist = self.application.dbapi.getRelativesCidbyUid(event["userid"]) pushlist.extend(relativelist) pushlist = list(Set(pushlist)) if(user['cid'] in pushlist): @@ -144,6 +142,7 @@ def post(self): pushdata['type'] = "endhelp" data['eventid'] = j['eventid'] data['time'] = currenttime.strftime('%Y-%m-%d %H:%M:%S') + data['username'] = event['username'] pushdata['data'] = data self.application.push.pushToList(pushlist,json_encode(pushdata)) self.write(json_encode(writedata)) @@ -160,13 +159,13 @@ def post(self): #content='{"eventid":1,"credits":[{"username":"test2","cridit":5},{"username":"test6","cridit":1}]}' jobj=json.loads(content) result=[] - event = self.application.dbapi.getEventByEventId(j['eventid']) + event = self.application.dbapi.getEventByEventId(jobj['eventid']) askuser = self.application.dbapi.getUserInfobyUid(event['usrid']) for issue in jobj["credits"]: temp = self.application.dbapi.setCreditByEventIdAndUserName(jobj["eventid"],issue["username"],issue["cridit"]) result.append({"helpername":issue["username"],"result":temp}) helper = self.application.dbapi.getUserInfobyName(issue['username']) - self.application.util.set(event,askuser,helper,issue["cridit"],self.application.dbapi) + self.application.util.setCreditforHelper(event,askuser,helper,issue["cridit"],self.application.dbapi) self.write(str(result)) class QuitaidHandler(tornado.web.RequestHandler): diff --git a/code/handler/HistoryHandler.py b/code/handler/HistoryHandler.py index b3efe06..e532b93 100644 --- a/code/handler/HistoryHandler.py +++ b/code/handler/HistoryHandler.py @@ -13,7 +13,7 @@ def post(self): content =self.request.body #content='{"name":"test3"}' jobj=json.loads(content) - user = self.application.dbapi.getUserByUserName(jobj['name']) + user = self.application.dbapi.getUserByUserName(jobj['username']) if(user is None): self.write('{"state":2,"decs":"User not exist"}') return @@ -23,11 +23,14 @@ def post(self): item['longitude'] = float(item['longitude']) item['latitude'] = float(item['latitude']) item['starttime'] = item['starttime'].strftime('%Y-%m-%d %H:%M:%S') - item['endtime'] = item['endtime'].strftime('%Y-%m-%d %H:%M:%S') + if(item['endtime'] is None): + item['endtime'] = "" + else: + item['endtime'] = item['endtime'].strftime('%Y-%m-%d %H:%M:%S') #result=self.application.dbapi.getEventsByUserName(jobj['name']) supports = self.application.dbapi.getSupportsbyUid(uid) for item in supports: item['time'] = item['time'].strftime('%Y-%m-%d %H:%M:%S') - self.write('{"state":1,"events":'+json_encode(events)+',"supports":'+json_encode(supports)) + self.write('{"state":1,"events":'+json_encode(events)+',"supports":'+json_encode(supports)+'}') return \ No newline at end of file From cb77b1855cbf5e3117983b21f06a5041e6a5160a Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Thu, 31 Jul 2014 09:05:11 +0800 Subject: [PATCH 64/66] add setcreditforhelper --- code/util.py | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 60 insertions(+), 2 deletions(-) diff --git a/code/util.py b/code/util.py index 8f9e758..eb5a172 100644 --- a/code/util.py +++ b/code/util.py @@ -1,5 +1,6 @@ import json,os,base64 import xml.etree.ElementTree as ET +import datetime class util: def __init__(self): self.score=dict() @@ -66,5 +67,62 @@ def setAudiobyEid(self,uid,videostring): audio.close() print "set Audio success" - def setCredictforHelper(self,event,askuser,helper,credit,dbapi): - pass + def setCreditforHelper(self,event,askuser,helper,credit,dbapi): + flag1 = 0 + flag2 = 0 + if event['kind'] == 3: + if helper['vocation'] == 1: + flag1 = 1 + if helper['age'] >= 40: + flag2 = 1 + elif event['kind'] == 1: + if helper['vocation'] == 2: + flag1 = 1 + if helper['age'] >= 20 and helper['age'] <= 50: + flag2 = 1 + + _Credit = 0.0 + beta = 0.5 + gama = 0.05 + if (credit * 2 * 0.1) < 0.3: + _Credit = 0.7 * (0.5 * flag1 + 0.5 * flag2) + 0.3 * (1 - beta / 2) * (credit * 2 * 0.1) + else: + if 0.5 < beta + gama: + _Credit = 0.7 * (0.5 * flag1 + 0.5 * flag2) + 0.3 * 0.5 * (credit * 2 * 0.1) + else: + _Credit = 0.7 * (0.5 * flag1 + 0.5 * flag2) + 0.3 * (beta + gama) * (credit * 2 * 0.1) + + T_preCredit = dbapi.getpreviousEvent(askuser['id'], helper['id']) + #return T_preCredit + Cov = askuser['credit'] + Cr = helper['credit'] + + curCredit = 0.0 + Reputation = 0.0 + timeInterval = 0.0 + if T_preCredit == None: + curCredit = _Credit + Reputation = Cov * _Credit + #return str(curCredit) + ',' + str(Reputation) + else: + timeInterval = (datetime.datetime.now() - T_preCredit['time']).days + #return timeInterval + Factor = 1 / pow(timeInterval + 1, 1 / 3.0) + #Factor = 0.8 + if Factor != 1: + curCredit = Factor * T_preCredit['credit'] + (1 - Factor) * _Credit + Reputation = (1 - Cov * (1 - Factor)) * Cr + (1 - Factor) * Cov * _Credit + #return str(T_preCredit['credit']) + ',' + str(Factor) + ',' + str(_Credit) + ',' + str(curCredit) + ',' + str(Reputation) + else: + curCredit = _Credit + Reputation = Cov * _Credit + #return str(curCredit) + ',' + str(Reputation) + + dbapi.updateUserCredit(helper['id'], Reputation) + #return dbapi.getUserInfobyUid(helper['id']) + + if T_preCredit == None: + dbapi.insertpreviousEvent(askuser['id'], helper['id'], curCredit, event['endtime']) + #return dbapi.getpreviousEvent(askuser['id'], helper['id']) + else: + dbapi.updatepreviousEvent(askuser['id'], helper['id'], curCredit, event['endtime']) \ No newline at end of file From e4caf83403f9b0b43fbe1307257d4291dfa60c2c Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Thu, 31 Jul 2014 14:43:37 +0800 Subject: [PATCH 65/66] after test,can run version 1 --- code/dbapi.py | 22 ++++++++----- code/handler/EventHandler.py | 18 +++++++---- code/handler/RelativesHandler.py | 5 ++- code/handler/UserHandler.py | 25 +++++++++------ code/handler/UserInfoHandler.py | 6 +++- code/main.py | 7 +---- code/score.py | 12 +++++--- code/util.py | 53 +++++++++++++++++++------------- db.sql | 18 ++++------- 9 files changed, 94 insertions(+), 72 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 41e5ea6..14221b8 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -390,7 +390,7 @@ def getEventAround(self,lon,lat,distance): and event.usrid = user.id and event.state = 0 and round(6378.138*2*asin(sqrt(pow(sin( (event.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(event.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (event.longitude*pi()/180-(%s)*pi()/180)/2),2)))) < %s - ORDER BY starttime DESC""" + ORDER BY starttime DESC limit 20""" param = (lat,lat,lon,lon,lat,lat,lon,distance) cursor.execute(sql,param) result = [] @@ -667,10 +667,11 @@ def addEventByUserName(self,username,message): else: cursor.execute("select now()") currentTime=cursor.fetchone() - sql = "select * from event where usrid = %s and kind = %s and latitude = %s and longitude = %s and TIMESTAMPDIFF(MINUTE,%s,starttime)<= 10" - param = (usrid["id"],message["kind"],message['latitude'],message['longitude'],currentTime['now()']) - cursor.execute(sql,param) - if(cursor.fetchall()): + #sql = "select * from event where usrid = %s and kind = %s and latitude = %s and longitude = %s and TIMESTAMPDIFF(MINUTE,%s,starttime)<= 10" + #param = (usrid["id"],message["kind"],message['latitude'],message['longitude'],currentTime['now()']) + #cursor.execute(sql,param) + #if(cursor.fetchall()): + if(False): return {"state":4,"errorDesc":"cannnot send the same message in 10 minute"} sql="insert into event (usrid,kind,state,content,starttime,latitude,longitude) values (%s,%s,%s,%s,%s,%s,%s)" param=(usrid["id"],message["kind"],0,message["content"],currentTime['now()'],message['latitude'],message['longitude']) @@ -1081,7 +1082,7 @@ def operateScoreInfoById(self,uid,cond,score_op): def getScoreInfoById(self,uid): cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql = "select * from score_op where id = %s" + sql = "select * from score_info where id = %s" param = (uid,) cursor.execute(sql, param) result = cursor.fetchone() @@ -1100,8 +1101,13 @@ def setScoreTimeById(self,uid,curTime): def getGreatestHelperId(self,eid): cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql = "select usrid from helper where eid = %s and credit = max(select max(credit) from helper where eid = %s)" - param = (eid,eid) + sql = "select max(credit) from helper where eid = %s" + param = (eid,) + cursor.execute(sql, param) + cre = cursor.fetchone() + cre = cre['max(credit)'] + sql = "select usrid from helper where eid = %s and credit = %s" + param = (eid,cre) cursor.execute(sql, param) result = cursor.fetchall() return result diff --git a/code/handler/EventHandler.py b/code/handler/EventHandler.py index 1226b11..3833f91 100644 --- a/code/handler/EventHandler.py +++ b/code/handler/EventHandler.py @@ -69,17 +69,19 @@ def post(self): else: result['canend'] = 0 if(self.application.dbapi.getFollow(uid,jobj['eventid']) is None): - result['isfollow'] = 0 + if(helpevent['username'] == jobj['username']): + result['isfollow'] = 1 + else: + result['isfollow'] = 0 else: result['isfollow'] = 1 result['support']=self.application.dbapi.getSupportsByEventId(jobj['eventid']) for support in result['support']: user=self.application.dbapi.getUserByUserId(support['usrid']) if(user): - support['username']=user['name']; - #avatar=self.application.util.getAvatar(user['name'],self.application.dbapi) - #support['avatar']=avatar - print json_encode(result) + support['username']=user['name'] + avatar=self.application.util.getAvatarbyUid(support['usrid']) + support['avatar']=avatar self.write(json_encode(result)) '''Yeqin Zheng, 09/07/2014''' @@ -94,6 +96,7 @@ def post(self): result = self.application.dbapi.addaidhelper(j['username'], j['eventid']) self.write("{'state': " + result + "}") + self.application.score.joinSupport(self.application.dbapi.getUserByUserName(j['username'])['id'],self.application.dbapi) class FinishHandler(tornado.web.RequestHandler): @@ -167,6 +170,7 @@ def post(self): helper = self.application.dbapi.getUserInfobyName(issue['username']) self.application.util.setCreditforHelper(event,askuser,helper,issue["cridit"],self.application.dbapi) self.write(str(result)) + application.score.giveCredit(event['usrid'],jobj['eventid'],self.application.dbapi) class QuitaidHandler(tornado.web.RequestHandler): def get(self): @@ -189,6 +193,7 @@ def post(self): self.application.dbapi.deleteHelperbyUidEid(uid,j['eventid']) print "quit success" self.write("{'state':1}") + application.score.quitSupport(uid,self.application.dbapi) return class SendsupportHandler(tornado.web.RequestHandler): @@ -199,7 +204,7 @@ def post(self): content =self.request.body #content='{"username":"test1","eid":4,"message":{"content":"TestssCofffntent"}}' jobj=json.loads(content) - user = self.application.dbapi.getUserByUserName(j['username']) + user = self.application.dbapi.getUserByUserName(jobj['username']) result=self.application.dbapi.addSupportByEventIdAndUserName(jobj["eid"],jobj["username"],jobj["message"]) if(result['errorCode'] == 200): pushlist = self.application.dbapi.getFollowerCidByEid(jobj['eid']) @@ -222,6 +227,7 @@ def post(self): pushdata['data'] = data self.application.push.pushToList(pushlist,json_encode(pushdata)) self.write(json_encode(result)) + self.application.score.sendSupport(user['id'],self.application.dbapi) class SupportmessageHandler(tornado.web.RequestHandler): diff --git a/code/handler/RelativesHandler.py b/code/handler/RelativesHandler.py index 87f27a5..5f050b3 100644 --- a/code/handler/RelativesHandler.py +++ b/code/handler/RelativesHandler.py @@ -50,7 +50,7 @@ def post(self): if re!=(): relatives=[] for row in re: - info=self.application.dbapi.getUsermassegeByUserId(row["cid"]) + info=self.application.dbapi.getUsermessegeByUserId(row["cid"]) info['kind'] = row['kind'] #info['avatar'] = self.application.util.getAvatarbyUid(info['id']) #relatives.append('{"info":'+str(info)+',"avatar":'+self.application.util.getAvatarbyUid(info['id'])+'}') @@ -85,8 +85,7 @@ def post(self): class AgreerelativesHandler(tornado.web.RequestHandler): def get(self): - self.write("

AgreerelativesHandler

") - + self.write("

AgreerelativesHandler

") def post(self): content =self.request.body #content = '{"u_name":"ooo","c_name":"11oo","kind": ,"agree":1(1同意,0不同意)}' diff --git a/code/handler/UserHandler.py b/code/handler/UserHandler.py index 4484d94..0ee1a2a 100644 --- a/code/handler/UserHandler.py +++ b/code/handler/UserHandler.py @@ -21,7 +21,9 @@ def post(self): self.write("{'state':2}") print "cardid exist" return - self.application.dbapi.register(j) + uid = self.application.dbapi.register(j) + self.write("{'state':3}") + print("Register success") if('file' in j): self.application.util.setAvatar(j['username'],j['file'],self.application.dbapi) @@ -29,9 +31,7 @@ def post(self): avatar=open(os.path.abspath('./static/avatar/default.png'),"rb"); filestring=base64.standard_b64encode(avatar.read()) self.application.util.setAvatar(j['username'],filestring,self.application.dbapi) - - self.write("{'state':3}") - print("Register success") + self.application.score.userRegister(uid,self.application.dbapi) return class LoginHandler(tornado.web.RequestHandler): @@ -64,7 +64,7 @@ def post(self): result['userid'] = user['id'] self.write(json_encode(result)) print("Login success") - #print self.application.util.getAvatar("12",self.application.dbapi) + self.application.score.userLogin(user['id'],self.application.dbapi) return class UpdateCid(tornado.web.RequestHandler): @@ -96,6 +96,7 @@ def post(self): self.application.dbapi.updateUserstate(uid,0) self.write("{'state':1}") print("Logout success") + self.application.score.checkOnlineHours(uid,self.application.dbapi) return class AuthenHandler(tornado.web.RequestHandler): @@ -105,8 +106,12 @@ def get(self): def post(self): #self.write("AuthenHandler") print "start" - print self.application.dbapi.gettemprelationbyCid(6) - #self.application.dbapi.addtempRelationByUsername("test2","test6",1,"lall") + #self.application.score.userLogin(1,self.application.dbapi) + #self.application.score.giveCredit(1,1,self.application.dbapi) + #self.application.score.joinSupport(1,self.application.dbapi) + #self.application.score.sendSupport(1,self.application.dbapi) + #self.application.score.checkOnlineHours(1,self.application.dbapi) + #self.application.score.quitSupport(1,self.application.dbapi) print "lall" return @@ -148,13 +153,13 @@ def post(self): if(j['searchtype'] == "exactSearch"): user = self.application.dbapi.getUserByUserName(j['username']) if(user is not None): - user = [] + users = [] username = {} username['username'] = user['name'] - user.append(username) + users.append(username) result ={} result['state'] = 1 - result['users'] = user + result['users'] = users else: result = {'state': 0} elif(j['searchtype'] == "keywordSearch"): diff --git a/code/handler/UserInfoHandler.py b/code/handler/UserInfoHandler.py index 40f1441..0656b25 100644 --- a/code/handler/UserInfoHandler.py +++ b/code/handler/UserInfoHandler.py @@ -42,7 +42,11 @@ def post(self): self.write("{'state':1}") print "username not exist" return - result = self.application.dbapi.getUsermassegeByUserId(user['id']) + result = self.application.dbapi.getUsermessegeByUserId(user['id']) + scorelimit = self.application.score.getRankByScore(result['score']) + result['scoreMin'] = scorelimit['scoreMin'] + result['scoreMax'] = scorelimit['scoreMax'] + result['scoreLevel'] = scorelimit['scoreLevel'] print result self.write("{'result':"+ json_encode(result)+"}") print("GetUserInfo success") diff --git a/code/main.py b/code/main.py index a42ee54..c115d4d 100644 --- a/code/main.py +++ b/code/main.py @@ -6,18 +6,13 @@ from push import * from xml.dom.minidom import parse,parseString -#login url handler -class IndexHandler(tornado.web.RequestHandler): - def get(self): - self.render("index.html") - class app(tornado.web.Application): def __init__(self): settings = { "static_path": os.path.join(os.path.dirname(__file__), "static"), "debug": True } - handlers=[(r"/",IndexHandler), + handlers=[ (r"/api/login",UserHandler.LoginHandler), (r"/api/register",UserHandler.RegisterHandler), (r"/api/userauthentication",UserHandler.AuthenHandler), diff --git a/code/score.py b/code/score.py index 1af0b66..7a1366b 100644 --- a/code/score.py +++ b/code/score.py @@ -1,5 +1,6 @@ import os,xml.etree.ElementTree as ET -from time import * +import time +from datetime import datetime class score: def __init__(self): _config=ET.parse(os.path.abspath("./static/config.xml")) @@ -63,22 +64,24 @@ def updateScoreByCase(self,uid,cond,dbapi): dbapi.operateScoreById(uid,score_op) dbapi.operateScoreInfoById(uid,cond,score_op) elif abs(info[name]+self.ops[cond]["op"]) <= abs(self.ops[cond]["max"]): - dbapi.operateScoreById(uid,self.ops[cond]["op"]) + dbapi.operateScoreById(uid,score_op) dbapi.operateScoreInfoById(uid,cond,score_op) else: return False + return True else: return False def userRegister(self,uid,dbapi): + dbapi.addScoreInfoById(uid) return self.updateScoreByCase(uid,1,dbapi) def userLogin(self,uid,dbapi): info = dbapi.getScoreInfoById(uid) if info is not None: if info['login_time'].strftime("%Y-%m-%d %H:%M:%S") == "2000-01-01 00:00:00": - dbpai.setScoreTimeById(uid,time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(time.time()))) + dbapi.setScoreTimeById(uid,time.strftime("%Y-%m-%d %H:%M:%S",time.localtime())) return self.updateScoreByCase(uid,2,dbapi) else: return False @@ -87,7 +90,6 @@ def userLogin(self,uid,dbapi): def giveCredit(self,uid,eid,dbapi): self.updateScoreByCase(uid,3,dbapi) - #condition 7 helpers = dbapi.getGreatestHelperId(eid) for helper in helpers: @@ -103,7 +105,7 @@ def sendSupport(self,uid,dbapi): def checkOnlineHours(self,uid,dbapi): info = dbapi.getScoreInfoById(uid) if info is not None: - if (time.localtime(time.time()) - info['login_time']).hours() >= 12: + if datetime.fromtimestamp(time.time()).hour - info['login_time'].hour >= 12: return self.updateScoreByCase(uid,6,dbapi) def quitSupport(self,uid,dbapi): diff --git a/code/util.py b/code/util.py index d4fe301..c599b94 100644 --- a/code/util.py +++ b/code/util.py @@ -1,39 +1,32 @@ +# -*- coding: utf-8 -*- import json,os,base64 import datetime class util: def setAvatar(self,username,filestring,dbapi): - print "Start set Avatar" userid=dbapi.getUserByUserName(username)['id'] avatar=open(os.path.abspath('./static/avatar/'+str(userid)+".png"),"wb") avatar.write(base64.standard_b64decode(filestring)) avatar.close() - print "End set Avatar" def getAvatar(self,username,dbapi): - print "Start get Avatar" userid=dbapi.getUserByUserName(username)['id'] avatar=open(os.path.abspath('./static/avatar/'+str(userid)+".png"),"rb") result="" result=base64.standard_b64encode(avatar.read()) avatar.close() - print "End get Avatar" return result def setAvatarbyUid(self,uid,filestring): - print "Start set Avatar" avatar=open(os.path.abspath('./static/avatar/'+str(uid)+".png"),"wb") avatar.write(base64.standard_b64decode(filestring)) avatar.close() - print "End set Avatar" def getAvatarbyUid(self,uid): - print "Start get Avatar" avatar=open(os.path.abspath('./static/avatar/'+str(uid)+".png"),"rb") result="" result=base64.standard_b64encode(avatar.read()) avatar.close() - print "End get Avatar" return result def setVideobyEid(self,uid,videostring): @@ -42,7 +35,6 @@ def setVideobyEid(self,uid,videostring): video=open(os.path.abspath('./static/Video/'+str(uid)+'/'+str(uid)+'.3gp'),"wb") video.write(base64.standard_b64decode(videostring)) video.close() - print "set Video success" def setAudiobyEid(self,uid,videostring): newdir = raw_input('./static/Audio/'+str(uid)) @@ -50,7 +42,6 @@ def setAudiobyEid(self,uid,videostring): audio=open(os.path.abspath('./static/Audio/'+str(uid)+'/'+str(uid)+'.amr'),"wb") audio.write(base64.standard_b64decode(videostring)) audio.close() - print "set Audio success" def setCreditforHelper(self,event,askuser,helper,credit,dbapi): flag1 = 0 @@ -66,16 +57,28 @@ def setCreditforHelper(self,event,askuser,helper,credit,dbapi): if helper['age'] >= 20 and helper['age'] <= 50: flag2 = 1 + #本次事件中得出的信用 _Credit = 0.0 - beta = 0.5 - gama = 0.05 - if (credit * 2 * 0.1) < 0.3: - _Credit = 0.7 * (0.5 * flag1 + 0.5 * flag2) + 0.3 * (1 - beta / 2) * (credit * 2 * 0.1) + + #beta = 1.0 #定义成用户的属性 + #gama1 = 0.01 # + #gama2 = 0.03 # + + if (credit * 2 * 0.1) <= 0.4: + helper['beta'] -= helper['gama2'] else: - if 0.5 < beta + gama: - _Credit = 0.7 * (0.5 * flag1 + 0.5 * flag2) + 0.3 * 0.5 * (credit * 2 * 0.1) - else: - _Credit = 0.7 * (0.5 * flag1 + 0.5 * flag2) + 0.3 * (beta + gama) * (credit * 2 * 0.1) + helper['beta'] += helper['gama1'] + + #计算出本次事件的信用 + _Credit = (0.05 * flag1 + 0.05 * flag2) + (credit * 2 * 0.1) + if _Credit > 1: + _Credit = 1 + if helper['beta'] > 0 and helper['beta'] < 1: + _Credit *= helper['beta'] + elif helper['beta'] <= 0: + _Credit = 0 + else: + helper['beta'] = 1 T_preCredit = dbapi.getpreviousEvent(askuser['id'], helper['id']) #return T_preCredit @@ -87,7 +90,10 @@ def setCreditforHelper(self,event,askuser,helper,credit,dbapi): timeInterval = 0.0 if T_preCredit == None: curCredit = _Credit - Reputation = Cov * _Credit + if Cov >= 0.4: + Reputation = _Credit + else: + Reputation = _Credit * 0.8 #return str(curCredit) + ',' + str(Reputation) else: timeInterval = (datetime.datetime.now() - T_preCredit['time']).days @@ -96,11 +102,16 @@ def setCreditforHelper(self,event,askuser,helper,credit,dbapi): #Factor = 0.8 if Factor != 1: curCredit = Factor * T_preCredit['credit'] + (1 - Factor) * _Credit - Reputation = (1 - Cov * (1 - Factor)) * Cr + (1 - Factor) * Cov * _Credit + Reputation = Factor * Cr + (1 - Factor) * _Credit + if Cov <= 0.4: + Reputation *= 0.8 #return str(T_preCredit['credit']) + ',' + str(Factor) + ',' + str(_Credit) + ',' + str(curCredit) + ',' + str(Reputation) else: curCredit = _Credit - Reputation = Cov * _Credit + if Cov >= 0.4: + Reputation = _Credit + else: + Reputation = _Credit * 0.8 #return str(curCredit) + ',' + str(Reputation) dbapi.updateUserCredit(helper['id'], Reputation) diff --git a/db.sql b/db.sql index 7b38b5b..a77c767 100644 --- a/db.sql +++ b/db.sql @@ -72,7 +72,6 @@ CREATE TABLE info longitude DECIMAL(12,7), primary key(id), foreign key(id) references user(id) ON DELETE CASCADE - ON DELETE CASCADE )DEFAULT CHARSET=utf8; /* @@ -122,7 +121,6 @@ CREATE TABLE event endtime datetime, primary key(id), foreign key(usrid) references user(id) ON DELETE CASCADE - ON DELETE CASCADE )DEFAULT CHARSET=utf8; /* @@ -142,7 +140,6 @@ CREATE TABLE helper primary key(id), foreign key(eid) references event(id) ON DELETE CASCADE, foreign key(usrid) references user(id) ON DELETE CASCADE - ON DELETE CASCADE )DEFAULT CHARSET=utf8; @@ -175,7 +172,6 @@ CREATE TABLE support primary key(id), foreign key(eid) references event(id) ON DELETE CASCADE, foreign key(usrid) references user(id) ON DELETE CASCADE - ON DELETE CASCADE )DEFAULT CHARSET=utf8; /* @@ -187,7 +183,6 @@ CREATE TABLE tpu usrid int NOT NULL, primary key(id), foreign key(usrid) references user(id) ON DELETE CASCADE - ON DELETE CASCADE )ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8; /* @@ -312,17 +307,16 @@ CREATE TABLE score_info( delimiter // CREATE PROCEDURE init_func() - BEGIN - UPDATE score_info SET login_time=TIMESTAMP('2000-01-01 00:00:00'), score1=0, score2=0, score3=0, score4=0, score5=0, score6=0, score7=0, score8=0, score9=0, score10=0, score11=0; - END// + BEGIN UPDATE score_info SET login_time="2000-01-01 00:00:00", score1=0, score2=0, score3=0, score4=0, score5=0, score6=0, score7=0, score8=0, score9=0, score10=0, score11=0; END// delimiter ; CREATE - EVENT IF NOT EXISTS init_score_info - ON SCHEDULE EVERY 1 DAY STARTS TIMESTAMP(CONCAT(CURRENT_DATE,'00:00:00')) - ON COMPLETION PRESERVE - DO CALL init_func(); + EVENT IF NOT EXISTS init_score_info + ON SCHEDULE EVERY 1 DAY STARTS (CONCAT(CURRENT_DATE(),' 00:00:00')) + ON COMPLETION PRESERVE + DO CALL init_func(); + /* 添加6用户(3男3女): */ From bf198763e329333cacef5ae86c337e8e0ff68603 Mon Sep 17 00:00:00 2001 From: KasenJ <1129390987@qq.com> Date: Wed, 6 Aug 2014 08:48:30 +0800 Subject: [PATCH 66/66] final code --- code/dbapi.py | 135 +++++++++++---- code/handler/Authorize.py | 10 +- code/handler/EventHandler.py | 88 ++++++++-- code/handler/GetArroundEvent.py | 3 +- code/handler/HistoryHandler.py | 4 +- code/handler/RelativesHandler.py | 14 +- code/handler/ThirdPartHandlers.py | 273 +++++++++++++++--------------- code/handler/UserHandler.py | 28 ++- code/handler/UserInfoHandler.py | 4 +- code/main.py | 3 +- code/util.py | 169 ++++++++++-------- db.sql | 11 +- 12 files changed, 459 insertions(+), 283 deletions(-) diff --git a/code/dbapi.py b/code/dbapi.py index 14221b8..bf5d96a 100644 --- a/code/dbapi.py +++ b/code/dbapi.py @@ -10,10 +10,10 @@ class dbapi: def __init__(self): self.host="localhost" - #self.user="comhelp" - #self.passwd="20140629" - self.user="root" - self.passwd="root" + self.user="comhelp" + self.passwd="20140629" + #self.user="root" + #self.passwd="root" self.dbname="community" self.charset="utf8" self.db=MySQLdb.connect(host=self.host,user=self.user,passwd=self.passwd,db=self.dbname,charset=self.charset) @@ -143,7 +143,7 @@ def getEventByEventId(self,eventid): def getEventandUserByEventId(self,eventid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="""select user.name as username,user.id as userid,content,starttime as time,event.kind as kind,event.id as eventid, event.latitude as latitude,event.longitude as longitude from event,user + sql="""select user.name as username,user.id as userid,content,starttime as time,event.kind as kind,event.id as eventid, event.latitude as latitude,event.longitude as longitude,Video as video, audio from event,user where event.id=%s and user.id = event.usrid""" param=(eventid,) cursor.execute(sql,param) @@ -274,7 +274,7 @@ def getHelpersCidbyEid(self,eid): def getRelativesCidbyUid(self,uid): cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) - sql="select user.cid from relation,user where usrid = %s and usrid = user.id" + sql="select user.cid from relation,user where usrid = %s and relation.cid = user.id" param=(uid,) cursor.execute(sql,param) result = [] @@ -282,7 +282,25 @@ def getRelativesCidbyUid(self,uid): result.append(row['cid']) cursor.close() return result - + + def getRelativesIdbyUid(self,uid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select cid as id from relation where usrid = %s" + param=(uid,) + cursor.execute(sql,param) + result = cursor.fetchall() + cursor.close() + return list(result) + + def getHelpersIdbyUid(self,uid): + cursor=self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql="select DISTINCT helper.usrid as id from event,helper where event.usrid = %s and event.id = helper.eid" + param=(uid,) + cursor.execute(sql,param) + result = cursor.fetchall() + cursor.close() + return list(result) + #check if cardid exist #exist return dict #not exist return none @@ -309,8 +327,8 @@ def register(self,content): result=cursor.fetchone() print result[0] - sql = "insert into info(id,cardid,name,sex,age,illness,credit,score,phone,vocation) values(%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)" - param = (result[0],content["cardid"],content["realname"],content["sex"],content["age"],content["illness"],0,0,content["phone"],content["vocation"]) + sql = "insert into info(id,cardid,name,sex,age,illness,score,phone,vocation) values(%s,%s,%s,%s,%s,%s,%s,%s,%s)" + param = (result[0],content["cardid"],content["realname"],content["sex"],content["age"],content["illness"],0,content["phone"],content["vocation"]) cursor.execute(sql,param) self.db.commit() @@ -339,6 +357,32 @@ def UpdateCidByuid(self,cid,uid): self.db.commit() cursor.close() return + + def UpdateInfotimebyUid(self,uid): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + cursor.execute("select now()") + currentTime=cursor.fetchone() + sql ="update info set time = %s where id = %s" + print currentTime['now()'] + param = (currentTime['now()'],uid) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + cursor.close() + return + def updateUserbetagama(self,uid,beta,gama): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql ="update info set beta = %s, gama = %s where id = %s" + param = (beta,gama,uid) + try: + cursor.execute(sql,param) + self.db.commit() + except: + self.db.rollback() + cursor.close() + return #get all relativeName by user.id #return a list contain all relations(including uid) @@ -390,7 +434,7 @@ def getEventAround(self,lon,lat,distance): and event.usrid = user.id and event.state = 0 and round(6378.138*2*asin(sqrt(pow(sin( (event.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(event.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (event.longitude*pi()/180-(%s)*pi()/180)/2),2)))) < %s - ORDER BY starttime DESC limit 20""" + ORDER BY starttime DESC limit 15""" param = (lat,lat,lon,lon,lat,lat,lon,distance) cursor.execute(sql,param) result = [] @@ -439,22 +483,55 @@ def getUserAround(self,lon,lat,distance): data={'state':0}#the user not exist,return state 0 #result=json.dumps(data) return data - - #updateuser credit score in info,use for givecredit - #pre cond:eid,uid exist,score >=0 - #after: update data credit,score in info - """def updateUserCreditScore(self,eid,uid,score): - cursor = self.db.cursor() - sql = "update info set score = score + %s,credit = (credit+5)/3 where id = %s" - param = (score,uid) - try: - cursor.execute(sql,param) - self.db.commit() - except: - self.db.rollback() + + def getUserAroundbykind(self,lon,lat,distance,kind): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + if(kind == 1): + sql = """select user.id as id,user.name as name,info.credit as credit ,user.cid as cid from user,info where + exists(select id from info where latitude <= (%s+1) and latitude >= (%s-1) and longitude <= (%s+1) and longitude>=(%s-1)) + and user.id = info.id + and (age>=20 and age <=40) + and round(6378.138*2*asin(sqrt(pow(sin( (info.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(info.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (info.longitude*pi()/180-(%s)*pi()/180)/2),2)))) < %s""" + param = (lat,lat,lon,lon,lat,lat,lon,distance) + elif(kind == 2): + sql ="""select user.id as id,user.name as name,info.credit as credit ,user.cid as cid from user,info where + exists(select id from info where latitude <= (%s+1) and latitude >= (%s-1) and longitude <= (%s+1) and longitude>=(%s-1)) + and user.id = info.id + and (age>=20 and age <=50) + and round(6378.138*2*asin(sqrt(pow(sin( (info.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(info.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (info.longitude*pi()/180-(%s)*pi()/180)/2),2)))) < %s""" + param = (lat,lat,lon,lon,lat,lat,lon,distance) + else: + sql = """select user.id as id,user.name as name,info.credit as credit ,user.cid as cid from user,info where + exists(select id from info where latitude <= (%s+1) and latitude >= (%s-1) and longitude <= (%s+1) and longitude>=(%s-1)) + and user.id = info.id + and round(6378.138*2*asin(sqrt(pow(sin( (info.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(info.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (info.longitude*pi()/180-(%s)*pi()/180)/2),2)))) < %s""" + param = (lat,lat,lon,lon,lat,lat,lon,distance) + cursor.execute(sql,param) + sqlre = cursor.fetchall() + return list(sqlre) + + def getAroundbyvocationOrKind(self,lon,lat,vocation,u_kind,vocation_limit,u_limit): + cursor = self.db.cursor(cursorclass=MySQLdb.cursors.DictCursor) + sql = """(select user.cid as cid from user,info where + exists(select id from info where latitude <= (%s+1) and latitude >= (%s-1) and longitude <= (%s+1) and longitude>=(%s-1)) + and user.id = info.id + and (vocation = %s) + order by round(6378.138*2*asin(sqrt(pow(sin( (info.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(info.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (info.longitude*pi()/180-(%s)*pi()/180)/2),2)))) asc limit %s) + UNION + (select user.cid as cid from user,info where + exists(select id from info where latitude <= (%s+1) and latitude >= (%s-1) and longitude <= (%s+1) and longitude>=(%s-1)) + and user.id = info.id + and (kind = %s) + order by round(6378.138*2*asin(sqrt(pow(sin( (info.latitude*pi()/180-(%s)*pi()/180)/2),2)+cos(info.latitude*pi()/180)*cos((%s)*pi()/180)* pow(sin( (info.longitude*pi()/180-(%s)*pi()/180)/2),2)))) asc limit %s)""" + param = (lat,lat,lon,lon,vocation,lat,lat,lon,vocation_limit,lat,lat,lon,lon,u_kind,lat,lat,lon,u_limit) + cursor.execute(sql,param) + cursor.close + result = [] + for row in cursor.fetchall(): + result.append(row['cid']) cursor.close() - return""" - + return result + #update user info by username,sex,age,phone,address,illness #pre cond:uid exist #after: update user info for what it pass @@ -692,7 +769,7 @@ def addEventByUserName(self,username,message): def UpdateEventVideoAndAudio(self,eid): cursor = self.db.cursor() sql = "update event set video = %s,audio = %s where id = %s" - param = ('./static/Video/'+str(uid)+'/'+str(uid)+'.3gp','./static/Audio/'+str(uid)+'/'+str(uid)+'.amr',eid) + param = ('http://114.215.133.61:8080/static/Video/'+str(eid)+'/'+str(eid)+'.3gp','http://114.215.133.61:8080/static/Audio/'+str(eid)+'/'+str(eid)+'.amr',eid) cursor.execute(sql,param) self.db.commit() cursor.close() @@ -701,7 +778,7 @@ def UpdateEventVideoAndAudio(self,eid): def UpdateEventVideo(self,eid): cursor = self.db.cursor() sql = "update event set video = %s where id = %s" - param = ('./static/Video/'+str(uid)+'/'+str(uid)+'.3gp',eid) + param = ('http://114.215.133.61:8080/static/Video/'+str(eid)+'/'+str(eid)+'.3gp',eid) cursor.execute(sql,param) self.db.commit() cursor.close() @@ -710,7 +787,7 @@ def UpdateEventVideo(self,eid): def UpdateEventAudio(self,eid): cursor = self.db.cursor() sql = "update event set audio = %s where id = %s" - param = ('./static/Audio/'+str(uid)+'/'+str(uid)+'.amr',eid) + param = ('http://114.215.133.61:8080/static/Audio/'+str(eid)+'/'+str(eid)+'.amr',eid) cursor.execute(sql,param) self.db.commit() cursor.close() @@ -1114,4 +1191,4 @@ def getGreatestHelperId(self,eid): def __del__(self): - self.db.close() \ No newline at end of file + self.db.close() diff --git a/code/handler/Authorize.py b/code/handler/Authorize.py index 0a68270..fdc2c18 100644 --- a/code/handler/Authorize.py +++ b/code/handler/Authorize.py @@ -68,10 +68,10 @@ class RequestEmailAuthHandler(tornado.web.RequestHandler): codechars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVW0123456789" host = "114.215.133.61:8080" - mail_host = "smtp.126.com" - mail_user = "bfbrmt" - mail_pass = "hdd2011bfbrmt" - mail_postfix = "126.com" + mail_host = "smtp.163.com" + mail_user = "CommunityHelp" + mail_pass = "community" + mail_postfix = "163.com" me = mail_user + "<" + mail_user + "@" + mail_postfix + ">" msg_content_template = u""" @@ -85,7 +85,7 @@ class RequestEmailAuthHandler(tornado.web.RequestHandler):

您已经成功发出了邮箱验证请求。

点击以下链接即可完成邮箱验证。如果无法点击,请手动复制网址到浏览器打开。

http://%s/api/authemail?username=%s&code=%s

-

请注意,本次验证的有效期为2天。在发送邮件之后的3天内任何时间都可以点击验证。

+

请注意,本次验证的有效期为2天。在发送邮件之后的2天内任何时间都可以点击验证。

如果超过三天还没有点击该链接,则验证将过期。您需要重新请求邮箱验证。

每个用户每天可以请求10次邮箱验证。如果超过10次,请第二天再试。

diff --git a/code/handler/EventHandler.py b/code/handler/EventHandler.py index 3833f91..9b6886c 100644 --- a/code/handler/EventHandler.py +++ b/code/handler/EventHandler.py @@ -11,32 +11,81 @@ def get(self): def post(self): content =self.request.body - #content='{"username":"test1","video":"TestAssist","audeo":"dsds","message":{"kind":1,"content":"TestContent", "videosign":1,,"audiosign":1,"latitude":23.000000,"longitude":23.000000}}' + #content='{"username":"test1","message":{"kind":1,"content":"TestContent", "video":"TestAssist","videosign":1,"audeo":"dsds","audiosign":1,"latitude":23.000000,"longitude":23.000000}}' jobj=json.loads(content) result = self.application.dbapi.addEventByUserName(jobj["username"],jobj["message"]) - #add push message,make all distance 5km + self.write(json_encode(result)) - if(jobj['message']['videosign'] == "1"): + if(jobj['message']['videosign'] =="1"): + print "test1" self.application.util.setVideobyEid(result['eventid'],jobj['video']) - if(jobj['message']['audiosign'] == "1"): + if(jobj['message']['audiosign'] =="1"): + print "test2" self.application.util.setAudiobyEid(result['eventid'],jobj['audio']) - if(result["state"] == 1): + """if(result["state"] == 1): eventinfo = self.application.dbapi.getEventandUserByEventId(result['eventid']) - #eventinfo['audio'] = jobj['message']['videosign'] - #eventinfo['video'] = jobj['message']['audiosign'] + eventinfo['audio'] = jobj['message']['videosign'] + eventinfo['video'] = jobj['message']['audiosign'] print '{"type":"help","data":'+json_encode(eventinfo)+'}' info = self.application.dbapi.getUserInfobyName(jobj["username"]) cidlist = self.application.dbapi.getUserCidAround(info["longitude"],info["latitude"],5) relativelist = self.application.dbapi.getRelativesCidbyUid(info['id']) cidlist.extend(relativelist) cidlist = list(Set(cidlist)) - if(info['cid'] in cidlist): - cidlist.remove(info['cid']) - self.application.push.pushToList(cidlist,'{"type":"help","data":'+json_encode(eventinfo)+'}') - - self.write(json_encode(result)) + cidlist.remove(info['cid']) + print cidlist + self.application.push.pushToList(cidlist,'{"type":"help","data":'+json_encode(eventinfo)+'}')""" + if(result["state"] == 1): + eventinfo = self.application.dbapi.getEventandUserByEventId(result['eventid']) + eventinfo['audio'] = jobj['message']['videosign'] + eventinfo['video'] = jobj['message']['audiosign'] + pushlist = [] + askuser = self.application.dbapi.getUserInfobyName(jobj["username"]) + relativelist = self.application.dbapi.getRelativesCidbyUid(askuser['id']) + print relativelist + pushlist.extend(relativelist) + friendlist = self.application.dbapi.getRelativesIdbyUid(askuser['id']) + hashelpaskuserlist = self.application.dbapi.getHelpersIdbyUid(askuser['id']) + distance = 3 + special = [] + if(jobj['message']['kind'] ==1):#anquan + print 1 + special = self.application.dbapi.getAroundbyvocationOrKind(askuser["longitude"],askuser["latitude"],1,4,20,5) + print special + pushlist.extend(special) + aroundhelpers = self.application.dbapi.getUserAroundbykind(askuser["longitude"],askuser["latitude"],distance,1) + while len(aroundhelpers) <= 50 and distance <= 7: + distance +=2 + aroundhelpers= self.application.dbapi.getUserAroundbykind(askuser["longitude"],askuser["latitude"],distance,1) + + + elif(jobj['message']['kind'] ==2): + print 2 + aroundhelpers = self.application.dbapi.getUserAroundbykind(askuser["longitude"],askuser["latitude"],distance,2) + while len(aroundhelpers) <= 10 and distance <= 7: + distance +=2 + aroundhelpers = self.application.dbapi.getUserAroundbykind(askuser["longitude"],askuser["latitude"],distance,2) + + else:#jiankang + print 3 + special = self.application.dbapi.getAroundbyvocationOrKind(askuser["longitude"],askuser["latitude"],1,5,10,5) + print special + pushlist.extend(special) + aroundhelpers = self.application.dbapi.getUserAroundbykind(askuser["longitude"],askuser["latitude"],distance,3) + while len(aroundhelpers) <= 20 and distance <= 5: + distance +=2 + aroundhelpers = self.application.dbapi.getUserAroundbykind(askuser["longitude"],askuser["latitude"],distance,3) + + predictlist = self.application.util.getPushlistByCredit(askuser,aroundhelpers,friendlist,hashelpaskuserlist,0.5,self.application.dbapi) + print predictlist + pushlist.extend(predictlist) + pushlist = list(Set(pushlist)) + if(askuser['cid'] in pushlist): + pushlist.remove(askuser['cid']) + print pushlist + self.application.push.pushToList(pushlist,'{"type":"help","data":'+json_encode(eventinfo)+'}') return class EventHandler(tornado.web.RequestHandler): @@ -49,11 +98,12 @@ def post(self): jobj=json.loads(content) uid = self.application.dbapi.getUserByUserName(jobj['username'])["id"] helpevent=self.application.dbapi.getEventandUserByEventId(jobj['eventid']) + print helpevent result={} if(helpevent): helpevent['follows'] = self.application.dbapi.getFollowsByEventId(jobj['eventid'])['count'] helpevent['helpers'] = len(self.application.dbapi.getHelpersCidbyEid(jobj['eventid'])) - result['event']=helpevent + result['event'] = helpevent ishelper = self.application.dbapi.checkifUseraddHelper(uid,jobj['eventid']) if(ishelper is None): if(helpevent['username'] == jobj['username']): @@ -75,11 +125,12 @@ def post(self): result['isfollow'] = 0 else: result['isfollow'] = 1 + print result result['support']=self.application.dbapi.getSupportsByEventId(jobj['eventid']) for support in result['support']: user=self.application.dbapi.getUserByUserId(support['usrid']) if(user): - support['username']=user['name'] + support['username']=user['name']; avatar=self.application.util.getAvatarbyUid(support['usrid']) support['avatar']=avatar self.write(json_encode(result)) @@ -96,7 +147,8 @@ def post(self): result = self.application.dbapi.addaidhelper(j['username'], j['eventid']) self.write("{'state': " + result + "}") - self.application.score.joinSupport(self.application.dbapi.getUserByUserName(j['username'])['id'],self.application.dbapi) + uid =self.application.dbapi.getUserByUserName(j['username'])['id'] + self.application.score.joinSupport(uid,self.application.dbapi) class FinishHandler(tornado.web.RequestHandler): @@ -114,7 +166,6 @@ def post(self): print "event not exist" return rNamelist = self.application.dbapi.getAllRelativeNamebyUid(event["userid"]) - print rNamelist if(user["id"] not in rNamelist): self.write("{'state':2}") print "user not relative or itself,can not update sate" @@ -127,6 +178,7 @@ def post(self): info['username'] = item['username'] info['uid'] = item['uid'] data.append(info) + self.application.dbapi.UpdateInfotimebyUid(item['uid']) #data.append("{'username':" + str(item['username']) + ",'uid':"+ str(item['uid'])+"}") writedata = {} writedata['state'] = 3 @@ -170,7 +222,7 @@ def post(self): helper = self.application.dbapi.getUserInfobyName(issue['username']) self.application.util.setCreditforHelper(event,askuser,helper,issue["cridit"],self.application.dbapi) self.write(str(result)) - application.score.giveCredit(event['usrid'],jobj['eventid'],self.application.dbapi) + self.application.score.giveCredit(event['usrid'],jobj['eventid'],self.application.dbapi) class QuitaidHandler(tornado.web.RequestHandler): def get(self): @@ -241,4 +293,4 @@ def post(self): if('video' in j): self.application.util.setVideobyEid(j['eid'],j['video']) if('audio' in j): - self.application.util.setAudiobyEid(j['eid'],j['video']) \ No newline at end of file + self.application.util.setAudiobyEid(j['eid'],j['video']) diff --git a/code/handler/GetArroundEvent.py b/code/handler/GetArroundEvent.py index 48adeea..839739f 100644 --- a/code/handler/GetArroundEvent.py +++ b/code/handler/GetArroundEvent.py @@ -17,7 +17,8 @@ def post(self): print "username not exist" return result = self.application.dbapi.getEventAround(user['longitude'],user['latitude'],5) + print result for item in result: item['avatar'] = self.application.util.getAvatar(item['name'],self.application.dbapi) self.write("{'state':1,aids:"+json_encode(result)+"}") - return \ No newline at end of file + return diff --git a/code/handler/HistoryHandler.py b/code/handler/HistoryHandler.py index e532b93..8e79d2b 100644 --- a/code/handler/HistoryHandler.py +++ b/code/handler/HistoryHandler.py @@ -31,6 +31,6 @@ def post(self): supports = self.application.dbapi.getSupportsbyUid(uid) for item in supports: item['time'] = item['time'].strftime('%Y-%m-%d %H:%M:%S') - + print json_encode(events),json_encode(supports) self.write('{"state":1,"events":'+json_encode(events)+',"supports":'+json_encode(supports)+'}') - return \ No newline at end of file + return diff --git a/code/handler/RelativesHandler.py b/code/handler/RelativesHandler.py index 5f050b3..c6ac8a3 100644 --- a/code/handler/RelativesHandler.py +++ b/code/handler/RelativesHandler.py @@ -42,8 +42,8 @@ def get(self): self.write("

CheckrelativesHandler

") def post(self): - #content =self.request.body - content = '{"username":"test1"}' + content =self.request.body + #content = '{"username":"test1"}' j = json.loads(content) userid=self.application.dbapi.getUserByUserName(j['username'])["id"] re=self.application.dbapi.CheckRelationbyId(userid) @@ -52,11 +52,10 @@ def post(self): for row in re: info=self.application.dbapi.getUsermessegeByUserId(row["cid"]) info['kind'] = row['kind'] - #info['avatar'] = self.application.util.getAvatarbyUid(info['id']) + info['avatar'] = self.application.util.getAvatarbyUid(info['id']) #relatives.append('{"info":'+str(info)+',"avatar":'+self.application.util.getAvatarbyUid(info['id'])+'}') relatives.append(info) - data={'state':1,'ralatives':relatives} - print data + data={'state':1,'relatives':relatives} else: data={'state':1,'relatives':'[]'} self.write(json_encode(data)) @@ -85,7 +84,8 @@ def post(self): class AgreerelativesHandler(tornado.web.RequestHandler): def get(self): - self.write("

AgreerelativesHandler

") + self.write("

AgreerelativesHandler

") + def post(self): content =self.request.body #content = '{"u_name":"ooo","c_name":"11oo","kind": ,"agree":1(1同意,0不同意)}' @@ -131,4 +131,4 @@ def post(self): result['state'] = 0 result['validations'] = validations self.write(json_encode(result)) - return \ No newline at end of file + return diff --git a/code/handler/ThirdPartHandlers.py b/code/handler/ThirdPartHandlers.py index 9aec377..91742da 100644 --- a/code/handler/ThirdPartHandlers.py +++ b/code/handler/ThirdPartHandlers.py @@ -3,8 +3,9 @@ __author__ = 'Administrator' import tornado.web -import json +import json,os,base64 import urllib +from CHRequestHandler import CHRequestHandler, LackParamsException, NoUserException # 2014-07-17 # @@ -17,142 +18,148 @@ # bind user # update user state # 我需要与前后台协商,除了本地登录之外,在增加第三方专用的返回值。这里就将就一下 +# error code +# 50001 访问授权api失败 +# 50002 不支持的平台 +# 50003 授权过期 +class ThirdPartyLoginHandler(CHRequestHandler): + platformapi = { "sinaweibo": "https://api.weibo.com/oauth2/get_token_info" } + requestname = "thirdpartylogin" -class ThirdPartyLoginHandler(tornado.web.RequestHandler): - platformapi = { "sinaweibo": "https://api.weibo.com/oauth2/get_token_info" } - - def post(self): - # 获取参数access_token和platform - access_token = self.get_argument("access_token") - platform = self.get_argument("platform") - # 根据platform获取对应的api地址 - url = ThirdPartyLoginHandler.platformapi.get(platform) - # 生成api参数。这里只考虑了sinaweibo的参数格式。需要改进。 - # urllib的post参数为字符串 - data = "access_token=" + access_token - try: - # 访问授权服务器,获取返回值 - result = urllib.urlopen(url, data).read() - print(result) - except IOError: - # 有可能出错,这时我们认为用户使用的是虚假令牌,认为登录失败 - print("IOError: fake access_token") - # 登录失败返回state:1 - self.write("{\"state\":1}") - return - # 解析返回值,这里依旧只考虑了新浪微博 - j = json.loads(result) - expire_in = j["expire_in"] - # 如果令牌超时,则驳回请求 - if expire_in <= 0: - # 返回state:1 - self.write("{\"state\":1}") - return - # 第三方不需要在本系统中设置用户名,因此自动生成一个作为第三方用户的唯一标识 - username = "*" + platform + ("%i" % j["uid"]) - # 这里做简单处理:直接将星号+platform+uid作为用户名,不设密码 - # 其他用户不允许第一个符号是星号。一般的用户名只允许出现字母,数字,空格,和下划线。 - # 首先检查是否已经注册过 - record = self.application.dbapi.getUserByUserName(username) - isNewUser = "false" - if record == None: - # 如果用户不存在,则新建用户并且插入数据库 - # 新建用户时的参数参考dbapi的代码 - # content是字典格式 - # username:用户名;kind:分三种,这里可以设为1-普通用户;password:第三方用户不需密码 - # kind:int整数 - newUser = {"username": username, - "kind": 1, - "password": "", - "cardid": 0, - "realname": "", - "sex": 0, - "age": 0, - "address": "", - "illness": ""} - self.application.dbapi.register(newUser) - # 再次取用户记录,因为需要获取uid,而uid是系统自动分配的 - record = self.application.dbapi.getUserByUserName(username) - isNewUser = "true" - # 现在新用户与老用户到了同一状态 - # 现在我们认为用户已经登录成功了,需要更新用户的状态为已登录 - # 这一部分可以参考正常的loginhandler - uid = record["id"] - self.application.dbapi.updateUserstate(uid, 1) # 登录状态为数字1 - # 返回登录成功的返回值 - returnValue = "{'state':3," + "'isNewUser':" + isNewUser + "}"; - self.write(returnValue) # 3表示登录成功 - print("third party login succeed") - print("return: " + returnValue) - return + def post(self): + try: + j = self.getParams(["platformname", "access_token", "latitude", "longitude"]) + except LackParamsException: + self.writeError(1, ThirdPartyLoginHandler.requestname) + return + url = ThirdPartyLoginHandler.platformapi.get(j["platformname"]) + if url is None: + self.writeError(50002, ThirdPartyLoginHandler.requestname) + return + data = "access_token=" + j["access_token"] + try: + resultstr = urllib.urlopen(url, data).read() + except IOError: + self.writeError(50001, ThirdPartyLoginHandler.requestname) + return + # 解析返回值,这里依旧只考虑了新浪微博 + result = json.loads(resultstr) + expire_in = result["expire_in"] + # 如果令牌超时,则驳回请求 + if expire_in <= 0: + # 返回state:1 + self.writeError(50003, ThirdPartyLoginHandler.requestname) + return + # 第三方不需要在本系统中设置用户名,因此自动生成一个作为第三方用户的唯一标识 + username = "*" + j["platformname"] + ("%i" % result["uid"]) + # 这里做简单处理:直接将星号+platform+uid作为用户名,不设密码 + # 其他用户不允许第一个符号是星号。一般的用户名只允许出现字母,数字,空格,和下划线。 + # 首先检查是否已经注册过 + try: + uid = self.getUserId(username) + except NoUserException: + newUser = {"username": username, + "kind": 1, + "password": "", + "cardid": 0, + "realname": "", + "sex": 0, + "age": 0, + "address": "", + "phone": "", + "vocation": 3, + "illness": ""} + uid = self.application.dbapi.register(newUser) + avatar=open(os.path.abspath('./static/avatar/default.png'),"rb"); + filestring=base64.standard_b64encode(avatar.read()) + self.application.util.setAvatarbyUid(uid,filestring) + self.application.score.userRegister(uid,self.application.dbapi) + self.application.dbapi.updateUseLBS(j['latitude'],j['longitude'],uid) + self.application.dbapi.updateUserstate(uid, 1) # 登录状态为数字1 + self.writeOK() + return # 在第三方登录成功之后,第三方用户状态就与本地用户相同了。这里的登出过程也几乎没有区别 class ThirdPartyLogoutHandler(tornado.web.RequestHandler): - # 数据库的所有操作都没有进行用户是否已经登录的检查。 - # 鉴于这种检查时普遍操作,可能会作为任何一项需要特权的操作的前置操作,仅仅需要修改少数类,因此这里不做检查,等待小组长修复该bug - # 这里需要将访问方式改为post。之前考虑失误。显然应该是post - def post(self): - # 这与正常的登出一模一样。直接copy代码。 - # 这里用到了username。按照我的预想,是不需要username的。但是第一版可以简单设计。 - # 这需要我修改几处anroid代码 - # 其他人采用json格式传输数据。我这里并没有采用,而是直接使用参数传递。 - username = "*" + self.get_argument("platform") + self.get_argument("uid") - print("username: " + username) - # 因为假设所有的特权操作都经过了检查,因此不必考虑用户不存在的情况 - record = self.application.dbapi.getUserByUserName(username) - uid = record["id"] - self.application.dbapi.updateUserstate(uid, 0) - self.write("{'state':1}") - self.write("Third Party Logout Test") + # 数据库的所有操作都没有进行用户是否已经登录的检查。 + # 鉴于这种检查时普遍操作,可能会作为任何一项需要特权的操作的前置操作,仅仅需要修改少数类,因此这里不做检查,等待小组长修复该bug + # 这里需要将访问方式改为post。之前考虑失误。显然应该是post + def post(self): + # 这与正常的登出一模一样。直接copy代码。 + # 这里用到了username。按照我的预想,是不需要username的。但是第一版可以简单设计。 + # 这需要我修改几处anroid代码 + # 其他人采用json格式传输数据。我这里并没有采用,而是直接使用参数传递。 + username = "*" + self.get_argument("platform") + self.get_argument("uid") + print("username: " + username) + # 因为假设所有的特权操作都经过了检查,因此不必考虑用户不存在的情况 + record = self.application.dbapi.getUserByUserName(username) + uid = record["id"] + self.application.dbapi.updateUserstate(uid, 0) + self.write("{'state':1}") + self.write("Third Party Logout Test") + +# 50001 访问平台授权服务器错误 +# 50002 不支持的平台 +# 50003 授权超时 +class ThirdPartyRemoveAccountHandler(CHRequestHandler): + platformapi = { "sinaweibo": "https://api.weibo.com/oauth2/get_token_info" } + requestname = "thirdpartyremoveaccount" -class ThirdPartyRemoveAccountHandler(tornado.web.RequestHandler): - # 与前面一个一样,这里的get也是不对的,需要改为post - def post(self): - # 这里也与正常注销几乎一样 - # 一般情况下,注销用户需要第二次检查,要求用户再次登录 - # 对于我们,就是再次传输了access_token - access_token = self.get_argument("access_token") - # 下面的一段是直接复制的,这与thirdpartylogin是一样的操作 - platform = self.get_argument("platform") - url = ThirdPartyLoginHandler.platformapi.get(platform) - data = "access_token=" + access_token - try: - result = urllib.urlopen(url, data).read() - print(result) - except IOError: - print("IOError: fake access_token") - self.write("{\"state\":1}") - return - j = json.loads(result) - expire_in = j["expire_in"] - if expire_in <= 0: - # 返回state:1 - self.write("{\"state\":1}") - return - # 至此,认为用户的第二次认证成功 - # 获取用户id,删除用户 - username = "*" + platform + ("%i" % j["uid"]) - record = self.application.dbapi.getUserByUserName(username) - uid = record["id"] - self.application.dbapi.cancelUser(uid) - # 用户已删除,这是返回登录成功的返回值,暗示了用户已删除 - self.write("{\"state\":3}") + # 与前面一个一样,这里的get也是不对的,需要改为post + def post(self): + try: + j = self.getParams(["platformname", "access_token"]) + except LackParamsException: + self.writeError(1, ThirdPartyLoginHandler.requestname) + return + url = ThirdPartyLoginHandler.platformapi.get(j["platformname"]) + if url is None: + self.writeError(50002, ThirdPartyLoginHandler.requestname) + return + data = "access_token=" + j["access_token"] + try: + resultstr = urllib.urlopen(url, data).read() + except IOError: + self.writeError(50001, ThirdPartyLoginHandler.requestname) + return + # 解析返回值,这里依旧只考虑了新浪微博 + result = json.loads(resultstr) + expire_in = result["expire_in"] + # 如果令牌超时,则驳回请求 + if expire_in <= 0: + # 返回state:1 + self.writeError(50003, ThirdPartyLoginHandler.requestname) + return + # 第三方不需要在本系统中设置用户名,因此自动生成一个作为第三方用户的唯一标识 + username = "*" + j["platformname"] + ("%i" % result["uid"]) + # 这里做简单处理:直接将星号+platform+uid作为用户名,不设密码 + # 其他用户不允许第一个符号是星号。一般的用户名只允许出现字母,数字,空格,和下划线。 + # 首先检查是否已经注册过 + try: + uid = self.getUserId(username) + except NoUserException: + self.writeError(2, ThirdPartyRemoveAccountHandler.requestname) + return + self.application.dbapi.cancelUser(uid) + # 用户已删除,这是返回登录成功的返回值,暗示了用户已删除 + print("delete user") + self.writeOK() class ThirdPartyFillUserInfoHandler(tornado.web.RequestHandler): - def post(self): - username = "*" + self.get_argument("platform") + self.get_argument("uid") - newUserInfo = { - "sex": self.get_argument("sex"), - "address": self.get_argument("address") - } - user = self.application.dbapi.getUserByUserName(username) - if(user is None): - self.write("{'state':1}") - print "username not exist" - return - print("username: " + username) - print("sex: " + newUserInfo["sex"]) - print("address: " + newUserInfo["address"]) - result = self.application.dbapi.updateUserinfo(user['id'], newUserInfo) - self.write("{'result':"+ str(result)+"}") - print("UpdateUserInfo success") \ No newline at end of file + def post(self): + username = "*" + self.get_argument("platform") + self.get_argument("uid") + newUserInfo = { + "sex": self.get_argument("sex"), + "address": self.get_argument("address") + } + user = self.application.dbapi.getUserByUserName(username) + if(user is None): + self.write("{'state':1}") + print "username not exist" + return + print("username: " + username) + print("sex: " + newUserInfo["sex"]) + print("address: " + newUserInfo["address"]) + result = self.application.dbapi.updateUserinfo(user['id'], newUserInfo) + self.write("{'result':"+ str(result)+"}") + print("UpdateUserInfo success") diff --git a/code/handler/UserHandler.py b/code/handler/UserHandler.py index 0ee1a2a..9e35881 100644 --- a/code/handler/UserHandler.py +++ b/code/handler/UserHandler.py @@ -42,9 +42,9 @@ def post(self): content = self.request.body #content = '{"username":"12","password":"1","latitude":23.000000,"longitude":23.000000}' j = json.loads(content) - if(j['username'].strip()==''): + if(j['username'].strip()=='' or j['username'].strip()[0]== '*'): self.write("{'state':1}") - print "username is null" + print "username is illegal" return user = self.application.dbapi.getUserByUserName(j['username']) @@ -90,6 +90,7 @@ def get(self): def post(self): content =self.request.body + print content #content = '{"username":"11oo"}' j = json.loads(content) uid = self.application.dbapi.getUserByUserName(j['username'])['id'] @@ -106,12 +107,19 @@ def get(self): def post(self): #self.write("AuthenHandler") print "start" - #self.application.score.userLogin(1,self.application.dbapi) - #self.application.score.giveCredit(1,1,self.application.dbapi) - #self.application.score.joinSupport(1,self.application.dbapi) - #self.application.score.sendSupport(1,self.application.dbapi) - #self.application.score.checkOnlineHours(1,self.application.dbapi) - #self.application.score.quitSupport(1,self.application.dbapi) + content='{"username":"test1","message":{"kind":1}}' + jobj=json.loads(content) + askuser = self.application.dbapi.getUserInfobyName(jobj["username"]) + print self.application.dbapi.getAroundbyvocationOrKind(askuser["longitude"],askuser["latitude"],1,5,10,5) + #print askuser + aroundhelpers = self.application.dbapi.getUserAroundbykind(askuser["longitude"],askuser["latitude"],5,jobj['message']['kind']) + #print aroundhelpers + friendlist = self.application.dbapi.getRelativesIdbyUid(askuser['id']) + #print friendlist + hashelpaskuserlist = self.application.dbapi.getHelpersIdbyUid(askuser['id']) + #print hashelpaskuserlist + pushlist = self.application.util.getPushlistByCredit(askuser,aroundhelpers,friendlist,hashelpaskuserlist,0.2,self.application.dbapi) + #print pushlist print "lall" return @@ -122,6 +130,7 @@ def get(self): def post(self): content = self.request.body + print content #content = '{"username":"test","password":"test"}' j = json.loads(content) if(j['username'].strip()=='' ): @@ -148,6 +157,7 @@ def get(self): def post(self): content =self.request.body + print content #content = '{"searchtype":"2","fromage":"20","endage":"30"}' j = json.loads(content) if(j['searchtype'] == "exactSearch"): @@ -186,4 +196,4 @@ def post(self): else: result['avatar'] = self.application.util.getAvatar(j['username'],self.application.dbapi) self.write(json_encode(result)) - return \ No newline at end of file + return diff --git a/code/handler/UserInfoHandler.py b/code/handler/UserInfoHandler.py index 0656b25..16b95de 100644 --- a/code/handler/UserInfoHandler.py +++ b/code/handler/UserInfoHandler.py @@ -43,11 +43,13 @@ def post(self): print "username not exist" return result = self.application.dbapi.getUsermessegeByUserId(user['id']) + result['credit'] = 5 * result['credit'] scorelimit = self.application.score.getRankByScore(result['score']) + result['scoreMin'] = scorelimit['scoreMin'] result['scoreMax'] = scorelimit['scoreMax'] result['scoreLevel'] = scorelimit['scoreLevel'] print result self.write("{'result':"+ json_encode(result)+"}") print("GetUserInfo success") - return \ No newline at end of file + return diff --git a/code/main.py b/code/main.py index c115d4d..3528967 100644 --- a/code/main.py +++ b/code/main.py @@ -48,8 +48,7 @@ def __init__(self): (r"/api/cancelfollow",FollowHandler.cancelFollowHandler), (r"/api/thirdpartylogin",ThirdPartHandlers.ThirdPartyLoginHandler), - (r"/api/thirdpartylogout",ThirdPartHandlers.ThirdPartyLogoutHandler), - (r"/api/thirdpartyremove",ThirdPartHandlers.ThirdPartyRemoveAccountHandler), + (r"/api/thirdpartyremoveaccount",ThirdPartHandlers.ThirdPartyRemoveAccountHandler), (r"/api/thirdpartyfilluserinfo",ThirdPartHandlers.ThirdPartyFillUserInfoHandler), (r"/api/authstate", Authorize.AuthStateHandler), diff --git a/code/util.py b/code/util.py index c599b94..123bf7c 100644 --- a/code/util.py +++ b/code/util.py @@ -30,95 +30,120 @@ def getAvatarbyUid(self,uid): return result def setVideobyEid(self,uid,videostring): - newdir = raw_input('./static/Video/'+str(uid)) + newdir ='./static/Video/'+str(uid) os.mkdir(newdir) video=open(os.path.abspath('./static/Video/'+str(uid)+'/'+str(uid)+'.3gp'),"wb") video.write(base64.standard_b64decode(videostring)) video.close() def setAudiobyEid(self,uid,videostring): - newdir = raw_input('./static/Audio/'+str(uid)) + newdir = './static/Audio/'+str(uid) os.mkdir(newdir) audio=open(os.path.abspath('./static/Audio/'+str(uid)+'/'+str(uid)+'.amr'),"wb") audio.write(base64.standard_b64decode(videostring)) audio.close() def setCreditforHelper(self,event,askuser,helper,credit,dbapi): - flag1 = 0 - flag2 = 0 - if event['kind'] == 3: - if helper['vocation'] == 1: - flag1 = 1 - if helper['age'] >= 40: - flag2 = 1 - elif event['kind'] == 1: - if helper['vocation'] == 2: - flag1 = 1 - if helper['age'] >= 20 and helper['age'] <= 50: - flag2 = 1 - - #本次事件中得出的信用 - _Credit = 0.0 - - #beta = 1.0 #定义成用户的属性 - #gama1 = 0.01 # - #gama2 = 0.03 # - - if (credit * 2 * 0.1) <= 0.4: - helper['beta'] -= helper['gama2'] - else: - helper['beta'] += helper['gama1'] - - #计算出本次事件的信用 - _Credit = (0.05 * flag1 + 0.05 * flag2) + (credit * 2 * 0.1) - if _Credit > 1: - _Credit = 1 - if helper['beta'] > 0 and helper['beta'] < 1: - _Credit *= helper['beta'] - elif helper['beta'] <= 0: - _Credit = 0 - else: - helper['beta'] = 1 - T_preCredit = dbapi.getpreviousEvent(askuser['id'], helper['id']) - #return T_preCredit - Cov = askuser['credit'] - Cr = helper['credit'] + credit = float(credit) + credit *= (2 * 0.1) + T_preCredit = dbapi.getpreviousEvent(askuser['id'], helper['id']) + + helperReputation = helper['credit'] + Reputation = 0 - curCredit = 0.0 - Reputation = 0.0 - timeInterval = 0.0 - if T_preCredit == None: - curCredit = _Credit - if Cov >= 0.4: - Reputation = _Credit - else: - Reputation = _Credit * 0.8 - #return str(curCredit) + ',' + str(Reputation) + #helperReputation = T_preCredit['credit'] + + if helper['time'] == None: + Reputation = (credit + helperReputation) / 2 else: - timeInterval = (datetime.datetime.now() - T_preCredit['time']).days - #return timeInterval - Factor = 1 / pow(timeInterval + 1, 1 / 3.0) - #Factor = 0.8 - if Factor != 1: - curCredit = Factor * T_preCredit['credit'] + (1 - Factor) * _Credit - Reputation = Factor * Cr + (1 - Factor) * _Credit - if Cov <= 0.4: - Reputation *= 0.8 - #return str(T_preCredit['credit']) + ',' + str(Factor) + ',' + str(_Credit) + ',' + str(curCredit) + ',' + str(Reputation) + timeInterval = (datetime.datetime.now() - helper['time']).days + if credit <= 0.4: + helper['beta'] /= 2 + helper['gama'] /= 2 + factor = 1 / pow(timeInterval * 2 + 1, 1 / 3.0) + Reputation = helper['beta'] * factor * helperReputation + (1 - helper['beta'] * factor) * credit else: - curCredit = _Credit - if Cov >= 0.4: - Reputation = _Credit - else: - Reputation = _Credit * 0.8 - #return str(curCredit) + ',' + str(Reputation) - + helper['beta'] += helper['gama'] + if helper['beta'] > 0.5: + helper['beta'] = 0.5 + factor = 1 / pow(timeInterval + 1, 1 / 3.0) + Reputation = (1 - helper['beta']) * factor * helperReputation + (1 - ((1 - helper['beta']) * factor)) * credit + dbapi.updateUserCredit(helper['id'], Reputation) - #return dbapi.getUserInfobyUid(helper['id']) + dbapi.updateUserbetagama(helper['id'], helper['beta'],helper['gama']) if T_preCredit == None: - dbapi.insertpreviousEvent(askuser['id'], helper['id'], curCredit, event['endtime']) - #return dbapi.getpreviousEvent(askuser['id'], helper['id']) + dbapi.insertpreviousEvent(askuser['id'], helper['id'], credit, event['endtime']) else: - dbapi.updatepreviousEvent(askuser['id'], helper['id'], curCredit, event['endtime']) + dbapi.updatepreviousEvent(askuser['id'], helper['id'], credit, event['endtime']) + + + def getPushlistByCredit(self,askuser,aroundhelpers,friendlist,hashelpaskuserlist,percent,dbapi): + pushlist = [] + lastpushlist = [] + for helper in aroundhelpers: + jv = 0.0 + helperReputation = 0.0 + hisCr = 0.0 + if friendlist is not None: + friend_helper_list = [] + for friend in friendlist: + if dbapi.getpreviousEvent(friend['id'], helper['id']) is not None: + friend_helper_list.append(friend) + if friend_helper_list is not None: + tv = [] + fv = [] + for f in friend_helper_list: + T_preCredit = dbapi.getpreviousEvent(f['id'], helper['id']) + fv.append(T_preCredit['credit']) + CmmNds = [] + for hashelpaskuser in hashelpaskuserlist: + if dbapi.getpreviousEvent(f['id'], hashelpaskuser['id']) is not None: + CmmNds.append(hashelpaskuser) + + para1 = 0.0 + para2 = 0.0 + para3 = 0.0 + + if CmmNds is not None: + for Mi in CmmNds: + T_preCredit1 = dbapi.getpreviousEvent(askuser['id'], Mi['id']) + T_preCredit2 = dbapi.getpreviousEvent(f['id'], Mi['id']) + para1 += (T_preCredit1['credit'] * T_preCredit2['credit']) + para2 += pow(T_preCredit1['credit'], 2.0) + para3 += pow(T_preCredit2['credit'], 2.0) + temp = pow(para2, 1 / 2.0) * pow(para3, 1 / 2.0) + if temp == 0: + temp = 0.000001 + tv.append(para1 / temp) + jv = 0.0 + sumOf_tv = 0.0 + sumOf_fv = 0.0 + for TV in tv: + sumOf_tv += TV + for FV in fv: + sumOf_fv += FV + if sumOf_tv != 0.0: + jv = (sumOf_fv * sumOf_tv) / sumOf_tv + + helperReputation = helper['credit'] + T_preCredit3 = dbapi.getpreviousEvent(askuser['id'], helper['id']) + if T_preCredit3 is not None: + hisCr = T_preCredit3['credit'] + + last_credit = jv + helperReputation + hisCr + pushlist.append((helper['name'],helper['cid'], last_credit)) + + pushlist.sort(key = lambda x: x[2], reverse = True) + count = 0 + for person in pushlist: + if count >= (len(pushlist) * percent): + break + lastpushlist.append(person) + count += 1 + + pushlist = [] + for item in lastpushlist: + pushlist.append(item[1]) + return pushlist diff --git a/db.sql b/db.sql index a77c767..75f8603 100644 --- a/db.sql +++ b/db.sql @@ -34,7 +34,7 @@ CREATE TABLE user kind int NOT NULL, password varchar(30), cid varchar(40), - state int, + state int DEFAULT 0, primary key(id), unique(name) )DEFAULT CHARSET=utf8; @@ -66,10 +66,13 @@ CREATE TABLE info phone varchar(25), address varchar(255), illness varchar(255), - credit double, + credit double DEFAULT 0.4, score int, latitude DECIMAL(12,7), longitude DECIMAL(12,7), + beta float DEFAULT 0.5, + gama float DEFAULT 0.05, + time datetime, primary key(id), foreign key(id) references user(id) ON DELETE CASCADE )DEFAULT CHARSET=utf8; @@ -113,8 +116,8 @@ CREATE TABLE event kind int NOT NULL, state int NOT NULL, content blob, - video blob, - audio blob, + video varchar(255) DEFAULT 0, + audio varchar(255) DEFAULT 0, latitude DECIMAL(12,7), longitude DECIMAL(12,7), starttime datetime,

http://%s/api/authemail?username=%s&code=%s