0x608060405234801561001057600080fd5b50614ff4806100206000396000f3fe6080604052600436106101445760003560e01c80639f865422116100b6578063d1660f991161006f578063d1660f9914610365578063d3e1c28414610385578063e5b07cdb146103a5578063eb5625d9146103c5578063fa461e33146103e5578063fa483e721461040557600080fd5b80639f865422146102b2578063a8920d2b146102d2578063aa37e8aa146102e5578063aeba9ec114610305578063bbf717e014610325578063cac460ee1461034557600080fd5b806351a743161161010857806351a74316146101f257806357618804146102125780635c6913d7146102325780638a6a1e8514610252578063923b8a2a14610272578063981f3a601461029257600080fd5b80630c7e120914610150578063187806841461017257806323a69e75146101925780632c8958f6146101b25780633afe5f00146101d257600080fd5b3661014b57005b600080fd5b34801561015c57600080fd5b5061017061016b36600461419b565b610425565b005b34801561017e57600080fd5b5061017061018d366004614217565b610462565b34801561019e57600080fd5b506101706101ad366004614217565b610476565b3480156101be57600080fd5b506101706101cd366004614217565b610642565b3480156101de57600080fd5b506101706101ed366004614281565b6107ce565b3480156101fe57600080fd5b5061017061020d366004614375565b610af5565b34801561021e57600080fd5b5061017061022d366004614456565b610cd2565b34801561023e57600080fd5b5061017061024d3660046144ea565b610f04565b34801561025e57600080fd5b5061017061026d366004614535565b61100e565b34801561027e57600080fd5b5061017061028d366004614217565b611081565b34801561029e57600080fd5b506101706102ad366004614576565b611257565b3480156102be57600080fd5b506101706102cd3660046145c8565b6112fc565b6101706102e0366004614628565b6113db565b3480156102f157600080fd5b5061017061030036600461465c565b6114d0565b34801561031157600080fd5b506101706103203660046144ea565b6116b2565b34801561033157600080fd5b50610170610340366004614281565b611797565b34801561035157600080fd5b50610170610360366004614281565b611a91565b34801561037157600080fd5b50610170610380366004614535565b611d07565b34801561039157600080fd5b506101706103a0366004614217565b611d1b565b3480156103b157600080fd5b506101706103c03660046144ea565b611d29565b3480156103d157600080fd5b506101706103e0366004614535565b611e0e565b3480156103f157600080fd5b50610170610400366004614217565b611e22565b34801561041157600080fd5b50610170610420366004614217565b611fb4565b6000806104318361214f565b915091508161045d578060405162461bcd60e51b81526004016104549190614710565b60405180910390fd5b505050565b610470848460018585612363565b50505050565b60008413806104855750600083135b6104c45760405162461bcd60e51b815260206004820152601060248201526f50616e63616b6556333a2044454c544160801b6044820152606401610454565b60006104d282840184614723565b90506000806000806104e7856000015161259b565b93509350935093506000610505610500868686866125e4565b61266e565b9050336001600160a01b0382161461052f5760405162461bcd60e51b8152600401610454906147b2565b60008060008c1361055557866001600160a01b0316866001600160a01b0316108b61056c565b856001600160a01b0316876001600160a01b0316108c5b9150915081156105bf57876020015181146105ba5760405162461bcd60e51b815260206004820152600e60248201526d50616e63616b6556333a2054494160901b6044820152606401610454565b610612565b876020015160008d136105d2578c6105d4565b8b5b146106125760405162461bcd60e51b815260206004820152600e60248201526d50616e63616b6556333a20544f4160901b6044820152606401610454565b6106343382846106225788610624565b895b6001600160a01b031691906127df565b505050505050505050505050565b60008413806106515750600083135b61068e5760405162461bcd60e51b815260206004820152600e60248201526d416c67656272613a2044454c544160901b6044820152606401610454565b600061069c82840184614723565b90506000806000806106b1856000015161259b565b935093509350935060006106ca610500868686866125e4565b9050336001600160a01b038216146106f45760405162461bcd60e51b8152600401610454906147b2565b60008060008c1361071a57866001600160a01b0316866001600160a01b0316108b610731565b856001600160a01b0316876001600160a01b0316108c5b91509150811561077d57876020015181146105ba5760405162461bcd60e51b815260206004820152600c60248201526b416c67656272613a2054494160a01b6044820152606401610454565b876020015160008d13610790578c610792565b8b5b146106125760405162461bcd60e51b815260206004820152600c60248201526b416c67656272613a20544f4160a01b6044820152606401610454565b6001600160a01b038316600160ff1b84161515600f60f886901c1660008161088357600080856001600160a01b031663392f37e96040518163ffffffff1660e01b815260040160e06040518083038186803b15801561082c57600080fd5b505afa158015610840573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061086491906147e9565b50505093509350505084610878578161087a565b805b9250505061092a565b600182141561092a57600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160806040518083038186803b1580156108c857600080fd5b505afa1580156108dc573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610900919061488b565b50506001600160701b031691506001600160701b03169150846109235781610925565b805b925050505b6040516370a0823160e01b81526001600160a01b0385811660048301526000916109b4918491908a16906370a08231906024015b60206040518083038186803b15801561097657600080fd5b505afa15801561098a573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906109ae91906148df565b90612842565b905060008315610a43576040516378a051ad60e11b8152600481018390526001600160a01b03898116602483015287169063f140a35a9060440160206040518083038186803b158015610a0657600080fd5b505afa158015610a1a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a3e91906148df565b610a5c565b610a5c86838760a063ffffffff60a01b8e16901c612857565b905060008086610a6e57600083610a72565b8260005b6040805160008152602081019182905263022c0d9f60e01b90915291935091506001600160a01b0389169063022c0d9f90610ab690859085908e90602481016148f8565b600060405180830381600087803b158015610ad057600080fd5b505af1158015610ae4573d6000803e3d6000fd5b505050505050505050505050505050565b8051825114610b165760405162461bcd60e51b81526004016104549061492f565b6000610b2b6001600160a01b03861630612a69565b905060008111610b4d5760405162461bcd60e51b815260040161045490614971565b600080610b5986612b0a565b915091506000610b8e826001600160801b0316610b88856001600160801b031687612b5190919063ffffffff16565b90612b5d565b905060005b8651811015610cc757610bae896001600160a01b0316612b69565b8015610bd85750868181518110610bc757610bc76149b6565b602002602001015160000151600014155b15610c015781878281518110610bf057610bf06149b6565b602002602001015160400181815250505b6000868281518110610c1557610c156149b6565b60200260200101511115610c6a57610c6a82878381518110610c3957610c396149b6565b6020026020010151898481518110610c5357610c536149b6565b6020026020010151612bb49092919063ffffffff16565b600080610c8f898481518110610c8257610c826149b6565b602002602001015161214f565b9150915081610cb2578060405162461bcd60e51b81526004016104549190614710565b50508080610cbf906149e2565b915050610b93565b505050505050505050565b6000600f85900b8181139113610ce85784610cf1565b610cf1856149fd565b94506000604051806040016040528085858080601f016020809104026020016040519081016040528093929190818152602001838380828437600092019190915250505090825250600f88900b60209091015290508615610e26578115610dff57876001600160a01b031663857f812f8688620c34fe1985604051602001610d799190614a2d565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401610da79493929190614a5f565b6040805180830381600087803b158015610dc057600080fd5b505af1158015610dd4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610df89190614a98565b5050610efa565b876001600160a01b03166359dd14368688620c35001985604051602001610d799190614a2d565b8115610e5257876001600160a01b0316632c4812528688620c34ff85604051602001610d799190614a2d565b876001600160a01b031663f094685a8688620c350185604051602001610e789190614a2d565b6040516020818303038152906040526040518563ffffffff1660e01b8152600401610ea69493929190614a5f565b6040805180830381600087803b158015610ebf57600080fd5b505af1158015610ed3573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610ef79190614a98565b50505b5050505050505050565b6040805160606020601f8501819004028201810183529181018381526000928291908690869081908501838280828437600092018290525093855250505060209091018790529091506001600160a01b0388169063c51c90299086908812610f6c5787610f75565b610f7588614abc565b8960008a12600087604051602001610f8d9190614a2d565b6040516020818303038152906040526040518763ffffffff1660e01b8152600401610fbd96959493929190614ad9565b6040805180830381600087803b158015610fd657600080fd5b505af1158015610fea573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610cc79190614a98565b60006110236001600160a01b03851630612a69565b9050816001600160f01b03811682111561107a5760f083901c6000611061612710610b888461105b886001600160f01b038916612842565b90612b51565b90506110776001600160a01b0388168783612bef565b50505b5050505050565b6000841180156110915750600083115b6110d15760405162461bcd60e51b81526020600482015260116024820152704d6176657269636b56313a2044454c544160781b6044820152606401610454565b60006110df82840184614723565b905060008060006110f38460000151612cb3565b6040516315e3ab2960e21b815233600482015292955090935091506001600160a01b0384169063578eaca49060240160206040518083038186803b15801561113a57600080fd5b505afa15801561114e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906111729190614b16565b61118e5760405162461bcd60e51b8152600401610454906147b2565b602084015160001280156111e75784602001518911156111e25760405162461bcd60e51b815260206004820152600f60248201526e4d6176657269636b56313a2054494160881b6044820152606401610454565b611236565b84602001516111f590614abc565b8810156112365760405162461bcd60e51b815260206004820152600f60248201526e4d6176657269636b56313a20544f4160881b6044820152606401610454565b610cc7338a836112465784610624565b856001600160a01b031691906127df565b600061129a61126e83670de0b6b3a7640000614b33565b610b88670de0b6b3a764000061105b611288886012614b4b565b61129390600a614c46565b8a90612b5d565b604051638d7ef9bb60e01b81526001600160a01b0388811660048301526024820183905291925090851690638d7ef9bb90604401600060405180830381600087803b1580156112e857600080fd5b505af1158015610ef7573d6000803e3d6000fd5b60006113116001600160a01b03861630612a69565b905060008061131f86612b0a565b91509150600061134e826001600160801b0316610b88856001600160801b031687612b5190919063ffffffff16565b9050600081116113705760405162461bcd60e51b815260040161045490614971565b611382886001600160a01b0316612b69565b801561138e5750855115155b1561139b57604086018190525b84156113ac576113ac868287612bb4565b6000806113b88861214f565b9150915081610ef7578060405162461bcd60e51b81526004016104549190614710565b60008151116114365760405162461bcd60e51b815260206004820152602160248201527f4f70656e4f6365616e3a20496e76616c69642063616c6c20706172616d6574656044820152603960f91b6064820152608401610454565b60005b81518110156114cc57306001600160a01b0316630c7e1209838381518110611463576114636149b6565b60200260200101516040518263ffffffff1660e01b81526004016114879190614c52565b600060405180830381600087803b1580156114a157600080fd5b505af11580156114b5573d6000803e3d6000fd5b5050505080806114c4906149e2565b915050611439565b5050565b6000826001600160a01b0316846001600160a01b03161190506000806000806000896001600160a01b031663d66940276040518163ffffffff1660e01b815260040160a06040518083038186803b15801561152a57600080fd5b505afa15801561153e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906115629190614c8b565b945094509450945094508561157857848461157b565b83855b90955093508561158c57828261158f565b81835b6040516370a0823160e01b81526001600160a01b038d811660048301529295509093506000916115d5916001600160701b038916918d16906370a082319060240161095e565b905060006115f7856001600160701b0316856001600160701b03168486612ce3565b9050600080896116095760008361160d565b8260005b90925090506001600160a01b038e1663022c0d9f83838e60006040519080825280601f01601f191660200182016040528015611650576020820181803683370190505b506040518563ffffffff1660e01b815260040161167094939291906148f8565b600060405180830381600087803b15801561168a57600080fd5b505af115801561169e573d6000803e3d6000fd5b505050505050505050505050505050505050565b6000856116dd576116d8600173fffd8963efd1fc6a506488495d951d5263988d26614ce9565b6116ed565b6116ed6401000276a36001614d11565b90506000604051806040016040528085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081018890526040519192506001600160a01b038a16916324b31a0c9188918a918c91889161176891899101614a2d565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610ea6959493929190614d3c565b604051632e0ae37560e01b81524260048201526001600160a01b03841690600160ff1b85161515908290632e0ae37590602401600060405180830381600087803b1580156117e457600080fd5b505af11580156117f8573d6000803e3d6000fd5b50505050600080600080856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b15801561183b57600080fd5b505afa15801561184f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906118739190614d77565b50909250905084611885578181611888565b80825b6040516370a0823160e01b81526001600160a01b0389811660048301526001600160701b039384169750919092169450600093506118d592508591908a16906370a082319060240161095e565b905060008461195457856001600160a01b0316630ece72366040518163ffffffff1660e01b815260040160206040518083038186803b15801561191757600080fd5b505afa15801561192b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061194f9190614dbc565b6119c5565b856001600160a01b0316637d316e286040518163ffffffff1660e01b815260040160206040518083038186803b15801561198d57600080fd5b505afa1580156119a1573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119c59190614dbc565b6001600160701b031690506119da8183614b4b565b915060006119f785858560a063ffffffff60a01b8f16901c612d48565b905060008087611a0957600083611a0d565b8260005b6040805160008152602081019182905263022c0d9f60e01b90915291935091506001600160a01b038a169063022c0d9f90611a5190859085908f90602481016148f8565b600060405180830381600087803b158015611a6b57600080fd5b505af1158015611a7f573d6000803e3d6000fd5b50505050505050505050505050505050565b6001600160a01b038316600160ff1b841615156000808080600160fc1b8916611b3057856001600160a01b0316630902f1ac6040518163ffffffff1660e01b815260040160606040518083038186803b158015611aed57600080fd5b505afa158015611b01573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b259190614d77565b509092509050611ba6565b856001600160a01b0316630902f1ac6040518163ffffffff1660e01b8152600401604080518083038186803b158015611b6857600080fd5b505afa158015611b7c573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ba09190614dd7565b90925090505b84611bb2578181611bb5565b80825b6040516370a0823160e01b81526001600160a01b0389811660048301526001600160701b03938416975091909216945060009350611c0292508591908a16906370a082319060240161095e565b90506000611c1f84848460a063ffffffff60a01b8e16901c612d48565b905060008086611c3157600083611c35565b8260005b91509150600160fd1b8b1660001415611cbe576040805160008152602081019182905263022c0d9f60e01b9091526001600160a01b0389169063022c0d9f90611c8790859085908e90602481016148f8565b600060405180830381600087803b158015611ca157600080fd5b505af1158015611cb5573d6000803e3d6000fd5b50505050611cfa565b6040516336cd320560e11b815260048101839052602481018290526001600160a01b038a81166044830152891690636d9a640a90606401610ab6565b5050505050505050505050565b61045d6001600160a01b0384168383612bef565b610470848460008585612363565b600085611d5457611d4f600173fffd8963efd1fc6a506488495d951d5263988d26614ce9565b611d64565b611d646401000276a36001614d11565b90506000604051806040016040528085858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050509082525060209081018890526040519192506001600160a01b038a169163128acb089188918b918b918891611ddf91899101614a2d565b6040516020818303038152906040526040518663ffffffff1660e01b8152600401610ea6959493929190614e0a565b61045d6001600160a01b0384168383612d7f565b6000841380611e315750600083135b611e705760405162461bcd60e51b815260206004820152601060248201526f556e697377617056333a2044454c544160801b6044820152606401610454565b6000611e7e82840184614723565b9050600080600080611e93856000015161259b565b93509350935093506000611eac610500868686866125e4565b9050336001600160a01b03821614611ed65760405162461bcd60e51b8152600401610454906147b2565b60008060008c13611efc57866001600160a01b0316866001600160a01b0316108b611f13565b856001600160a01b0316876001600160a01b0316108c5b915091508115611f6157876020015181146105ba5760405162461bcd60e51b815260206004820152600e60248201526d556e697377617056333a2054494160901b6044820152606401610454565b876020015160008d13611f74578c611f76565b8b5b146106125760405162461bcd60e51b815260206004820152600e60248201526d556e697377617056333a20544f4160901b6044820152606401610454565b6000841380611fc35750600083135b6120055760405162461bcd60e51b81526020600482015260136024820152724b79626572456c61737469633a2044454c544160681b6044820152606401610454565b600061201382840184614723565b9050600080600080612028856000015161259b565b93509350935093506000612041610500868686866125e4565b9050336001600160a01b0382161461206b5760405162461bcd60e51b8152600401610454906147b2565b60008060008c1361209157866001600160a01b0316866001600160a01b0316108b6120a8565b856001600160a01b0316876001600160a01b0316108c5b9150915081156120f957876020015181146105ba5760405162461bcd60e51b81526020600482015260116024820152704b79626572456c61737469633a2054494160781b6044820152606401610454565b876020015160008d1361210c578c61210e565b8b5b146106125760405162461bcd60e51b81526020600482015260116024820152704b79626572456c61737469633a20544f4160781b6044820152606401610454565b600060606121608360600151612ea3565b156121a65760405162461bcd60e51b815260206004820152601660248201527513dc195b93d8d9585b8e88139bdd08185b1b1bddd95960521b6044820152606401610454565b82516001600160a01b0381166121b95750305b83604001514710156122275760405162461bcd60e51b815260206004820152603160248201527f4f70656e4f6365616e3a20496e73756666696369656e742062616c616e636520604482015270199bdc88195e1d195c9b985b0818d85b1b607a1b6064820152608401610454565b600060606000866020015111156122ad57826001600160a01b03168660400151876020015190886060015160405161225f9190614e45565b600060405180830381858888f193505050503d806000811461229d576040519150601f19603f3d011682016040523d82523d6000602084013e6122a2565b606091505b509092509050612317565b826001600160a01b0316866040015187606001516040516122ce9190614e45565b60006040518083038185875af1925050503d806000811461230b576040519150601f19603f3d011682016040523d82523d6000602084013e612310565b606091505b5090925090505b81612357826040518060400160405280602081526020017f4f70656e4f6365616e2065787465726e616c2063616c6c206661696c65643a20815250612f73565b94509450505050915091565b60008511806123725750600084115b6123ad5760405162461bcd60e51b815260206004820152600c60248201526b695a554d693a2044454c544160a01b6044820152606401610454565b60006123bb82840184614723565b90506000806000806123d085600001516131df565b604051635f65e63560e11b81526001600160a01b038085166004830152808416602483015262ffffff83166044830152949850929650909450925060009186169063becbcc6a9060640160206040518083038186803b15801561243257600080fd5b505afa158015612446573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061246a9190614e61565b9050336001600160a01b038216146124945760405162461bcd60e51b8152600401610454906147b2565b6000808a6124b757856001600160a01b0316856001600160a01b0316108c6124ce565b846001600160a01b0316866001600160a01b0316108d5b91509150811561251e5787602001518111156125195760405162461bcd60e51b815260206004820152600a602482015269695a554d693a2054494160b01b6044820152606401610454565b61256b565b87602001518b61252e578d612530565b8c5b101561256b5760405162461bcd60e51b815260206004820152600a602482015269695a554d693a20544f4160b01b6044820152606401610454565b61258c33828461257b5787610624565b886001600160a01b031691906127df565b50505050505050505050505050565b60008080806125aa858261321e565b93506125b78560146132d2565b91506125c485601761321e565b9250602e8551106125dd576125da85602b6132d2565b90505b9193509193565b604080516080810182526000808252602082018190529181018290526060810191909152836001600160a01b0316856001600160a01b03161115612626579293925b6040518060800160405280866001600160a01b03168152602001856001600160a01b031681526020018462ffffff1681526020018362ffffff1681525090505b949350505050565b60008060006126a7846060015162ffffff16600881111561269157612691614e7e565b60088111156126a2576126a2614e7e565b61337d565b915091506126df846060015162ffffff1660088111156126c9576126c9614e7e565b60088111156126da576126da614e7e565b61373d565b1561275e5781846000015185602001516040516020016127159291906001600160a01b0392831681529116602082015260400190565b604051602081830303815290604052805190602001208260405160200161273e93929190614e94565b6040516020818303038152906040528051906020012060001c92506127d8565b835160208086015160408088015181516001600160a01b0395861681860152949092168482015262ffffff909116606080850191909152815180850390910181526080840190915280519101206127bc91849190849060a001614e94565b6040516020818303038152906040528051906020012060001c92505b5050919050565b6040516001600160a01b03831660248201526044810182905261045d90849063a9059cbb60e01b906064015b60408051601f198184030181529190526020810180516001600160e01b03166001600160e01b031990931692909217909152613791565b600061284e8284614b4b565b90505b92915050565b6000600c82901c8061286857506127105b610fff909216918061287a8487614ecc565b6128849190614eeb565b61288e9086614b4b565b945060008060008060008a6001600160a01b031663392f37e96040518163ffffffff1660e01b815260040160e06040518083038186803b1580156128d157600080fd5b505afa1580156128e5573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061290991906147e9565b5050945094509450945094508015612a2557600061292a8484888886613863565b90508561293f85670de0b6b3a7640000614ecc565b6129499190614eeb565b93508461295e84670de0b6b3a7640000614ecc565b6129689190614eeb565b92506000808b61297957858561297c565b84865b915091508b6129a757876129988e670de0b6b3a7640000614ecc565b6129a29190614eeb565b6129c4565b866129ba8e670de0b6b3a7640000614ecc565b6129c49190614eeb565b9c5060006129de838f6129d79190614b33565b8584613954565b6129e89083614b4b565b9050670de0b6b3a76400008d6129fe5788612a00565b895b612a0a9083614ecc565b612a149190614eeb565b9a5050505050505050505050612666565b6000808a612a34578484612a37565b83855b9092509050612a468c83614b33565b612a50828e614ecc565b612a5a9190614eeb565b98505050505050505050612666565b6000612a7483612b69565b15612a8a57506001600160a01b03811631612851565b6040516370a0823160e01b81526001600160a01b0383811660048301528416906370a082319060240160206040518083038186803b158015612acb57600080fd5b505afa158015612adf573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612b0391906148df565b9050612851565b600080608083901c838115801590612b2b57506000816001600160801b0316115b612b475760405162461bcd60e51b81526004016104549061492f565b9094909350915050565b600061284e8284614ecc565b600061284e8284614eeb565b60006001600160a01b03821673eeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee1480612ba057506001600160a01b038216611010145b806128515750506001600160a01b03161590565b600082604051602001612bc991815260200190565b60408051601f198184030181529190526060909401516020948501519201909301525050565b801561045d57612bfe83612b69565b15612c9f576000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114612c50576040519150601f19603f3d011682016040523d82523d6000602084013e612c55565b606091505b50509050806104705760405162461bcd60e51b815260206004820152601660248201527508cc2d2d8cac840e8de40e8e4c2dce6cccae4408aa8960531b6044820152606401610454565b61045d6001600160a01b03841683836127df565b60008080612cc1848261321e565b9250612cce84601461321e565b9150612cdb84602861321e565b929491935050565b600080612d06670de0b6b3a7640000610b88612cff8287612842565b8790612b51565b90506000612d148287612b51565b90506000612d228884613a66565b90508015612d3957612d348282612b5d565b612d3c565b60005b98975050505050505050565b600080612d558484612b51565b90506000612d638287612b51565b90506000612d2283612d798a633b9aca00612b51565b90613a66565b612d8883612b69565b15612dcd5760405162461bcd60e51b8152602060048201526015602482015274082e0e0e4deecca40c6c2d8d8cac840dedc408aa89605b1b6044820152606401610454565b80612de75761045d6001600160a01b038416836000613a72565b604051636eb1769f60e11b81523060048201526001600160a01b0383811660248301526000919085169063dd62ed3e9060440160206040518083038186803b158015612e3257600080fd5b505afa158015612e46573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190612e6a91906148df565b905081811015610470578015612e8f57612e8f6001600160a01b038516846000613a72565b6104706001600160a01b0385168484613a72565b600081516064148015612edb575081600081518110612ec457612ec46149b6565b6020910101516001600160f81b031916602360f81b145b8015612f0c575081600181518110612ef557612ef56149b6565b6020910101516001600160f81b031916601760fb1b145b8015612f3d575081600281518110612f2657612f266149b6565b6020910101516001600160f81b031916603960f91b145b8015612851575081600381518110612f5757612f576149b6565b6020910101516001600160f81b03191660dd60f81b1492915050565b60606044835110158015612fac575082600081518110612f9557612f956149b6565b6020910101516001600160f81b031916600160fb1b145b8015612fdd575082600181518110612fc657612fc66149b6565b6020910101516001600160f81b03191660c360f81b145b801561300e575082600281518110612ff757612ff76149b6565b6020910101516001600160f81b031916607960f81b145b801561303f575082600381518110613028576130286149b6565b6020910101516001600160f81b031916600560fd1b145b156130c9576044838101805190916130579190614b33565b8451101561309f5760405162461bcd60e51b815260206004820152601560248201527424b73b30b634b2103932bb32b93a103932b0b9b7b760591b6044820152606401610454565b82816040516020016130b2929190614f0d565b604051602081830303815290604052915050612851565b825160241480156130ff5750826000815181106130e8576130e86149b6565b6020910101516001600160f81b031916602760f91b145b8015613130575082600181518110613119576131196149b6565b6020910101516001600160f81b031916600960fb1b145b801561316157508260028151811061314a5761314a6149b6565b6020910101516001600160f81b031916607b60f81b145b801561319257508260038151811061317b5761317b6149b6565b6020910101516001600160f81b031916607160f81b145b156131b7576024830151826131a682613b96565b6040516020016130b2929190614f5c565b816040516020016131c89190614f91565b604051602081830303815290604052905092915050565b60008080806131ee858261321e565b93506131fb85601461321e565b92506132088560286132d2565b905061321585602b61321e565b91509193509193565b60008161322c816014614b33565b101561326f5760405162461bcd60e51b8152602060048201526012602482015271746f416464726573735f6f766572666c6f7760701b6044820152606401610454565b61327a826014614b33565b835110156132c25760405162461bcd60e51b8152602060048201526015602482015274746f416464726573735f6f75744f66426f756e647360581b6044820152606401610454565b500160200151600160601b900490565b6000816132e0816003614b33565b10156133225760405162461bcd60e51b8152602060048201526011602482015270746f55696e7432345f6f766572666c6f7760781b6044820152606401610454565b61332d826003614b33565b835110156133745760405162461bcd60e51b8152602060048201526014602482015273746f55696e7432345f6f75744f66426f756e647360601b6044820152606401610454565b50016003015190565b600080600183600881111561339457613394614e7e565b141561346d574660388114156133e35773db1d10011ad0ff90774d0c6bb92e5c5c8b4461f792507fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b549150613467565b8061a4ec141561342c5773afe208a311b21f13ef87e33a90049fc17a7acdec92507fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b549150613467565b731f98431c8ad98523631ae4a59f267346ea31f98492507fe34f199b19b2b4f47f68442619d555527d244f78a3297ea89325f843f87b8b5491505b50915091565b600283600881111561348157613481614e7e565b14156134ef574661044d8114156134ae57730d500b1d8e8ef31e21c99d1db9a6444d3adf127092506134c6565b732d98e2fa9da15aa6dc9581ab097ced7af697cb9292505b507f6ec6c9c8091d160c0aa74b2b14ba9c1717e95093bd3ac085cee99a49aab294a49050915091565b600383600881111561350357613503614e7e565b141561354757507341ff9aa7e16b8b1a8a8dc4f0efacd93d02d071c990507f6ce8eb472fa82df5469c6ab6d485f17c3ad13c8cd7af59b3d4a8026c5ce0f7e2915091565b600483600881111561355b5761355b614e7e565b141561359f57507324e85f5f94c6017d2d87b434394e87df4e4d56e390507f6ec6c9c8091d160c0aa74b2b14ba9c1717e95093bd3ac085cee99a49aab294a4915091565b60058360088111156135b3576135b3614e7e565b14156135f7575073fb48cab056b673bacde3a806c9e1f957275cfd0d90507f92f328fdbad51f108a4a63e08661a6a329a25ccd4d30f112a81aaa3d0abdad80915091565b600683600881111561360b5761360b614e7e565b141561364f575073c89f69baa3ff17a842ab2de89e5fc8a8e2cc735890507fd61302e7691f3169f5ebeca3a0a4ab8f7f998c01e55ec944e62cfb1109fd2736915091565b600783600881111561366357613663614e7e565b14156136a7575073a3792b3678b61001839c404ffcd20ef103473f6890507f146a9a61ada215bdbc7346c169e030cf383f441b85d40c70970f98c8aa070cd4915091565b60088360088111156136bb576136bb614e7e565b14156136ff575073de474db1fa59898bc91314328d29507acd0d593c90507fd3e7f58b9af034cfa7a0597e539bae7c6b393817a47a6fc1e1503cd6eaffe22a915091565b50735f1dddbf348ac2fbe22a163e30f99f9ece3dd50a90507fc597aba1bb02db42ba24a8878837965718c032f8b46be94a6e46452a9f89ca01915091565b6000600282600881111561375357613753614e7e565b14806137705750600482600881111561376e5761376e614e7e565b145b806128515750600682600881111561378a5761378a614e7e565b1492915050565b60006137e6826040518060400160405280602081526020017f5361666545524332303a206c6f772d6c6576656c2063616c6c206661696c6564815250856001600160a01b0316613bc29092919063ffffffff16565b80519091501561045d57808060200190518101906138049190614b16565b61045d5760405162461bcd60e51b815260206004820152602a60248201527f5361666545524332303a204552433230206f7065726174696f6e20646964206e6044820152691bdd081cdd58d8d9595960b21b6064820152608401610454565b6000811561393e5760008461388088670de0b6b3a7640000614ecc565b61388a9190614eeb565b90506000846138a188670de0b6b3a7640000614ecc565b6138ab9190614eeb565b90506000670de0b6b3a76400006138c28385614ecc565b6138cc9190614eeb565b90506000670de0b6b3a76400006138e38480614ecc565b6138ed9190614eeb565b670de0b6b3a76400006139008680614ecc565b61390a9190614eeb565b6139149190614b33565b9050670de0b6b3a76400006139298284614ecc565b6139339190614eeb565b94505050505061394b565b6139488587614ecc565b90505b95945050505050565b6000805b60ff811015613a5a5782600061396e8783613bd1565b9050858110156139be5760006139848887613c6e565b61398e8389614b4b565b6139a090670de0b6b3a7640000614ecc565b6139aa9190614eeb565b90506139b68187614b33565b955050613a00565b60006139ca8887613c6e565b6139d48884614b4b565b6139e690670de0b6b3a7640000614ecc565b6139f09190614eeb565b90506139fc8187614b4b565b9550505b81851115613a29576001613a148387614b4b565b11613a2457849350505050613a5f565b613a45565b6001613a358684614b4b565b11613a4557849350505050613a5f565b50508080613a52906149e2565b915050613958565b508190505b9392505050565b600061284e8284614b33565b801580613afb5750604051636eb1769f60e11b81523060048201526001600160a01b03838116602483015284169063dd62ed3e9060440160206040518083038186803b158015613ac157600080fd5b505afa158015613ad5573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190613af991906148df565b155b613b665760405162461bcd60e51b815260206004820152603660248201527f5361666545524332303a20617070726f76652066726f6d206e6f6e2d7a65726f60448201527520746f206e6f6e2d7a65726f20616c6c6f77616e636560501b6064820152608401610454565b6040516001600160a01b03831660248201526044810182905261045d90849063095ea7b360e01b9060640161280b565b606061285182604051602001613bae91815260200190565b604051602081830303815290604052613cd6565b60606126668484600085613eee565b6000670de0b6b3a764000082818581613bea8280614ecc565b613bf49190614eeb565b613bfe9190614ecc565b613c089190614eeb565b613c129190614ecc565b613c1c9190614eeb565b670de0b6b3a7640000808481613c328280614ecc565b613c3c9190614eeb565b613c469190614ecc565b613c509190614eeb565b613c5a9086614ecc565b613c649190614eeb565b61284e9190614b33565b6000670de0b6b3a76400008381613c858280614ecc565b613c8f9190614eeb565b613c999190614ecc565b613ca39190614eeb565b670de0b6b3a764000080613cb78580614ecc565b613cc19190614eeb565b613ccc866003614ecc565b613c5a9190614ecc565b60408051808201909152601081526f181899199a1a9b1b9c1cb0b131b232b360811b6020820152815160609190600090613d11906002614ecc565b613d1c906002614b33565b6001600160401b03811115613d3357613d33614064565b6040519080825280601f01601f191660200182016040528015613d5d576020820181803683370190505b509050600360fc1b81600081518110613d7857613d786149b6565b60200101906001600160f81b031916908160001a905350600f60fb1b81600181518110613da757613da76149b6565b60200101906001600160f81b031916908160001a90535060005b8451811015613ee657826004868381518110613ddf57613ddf6149b6565b016020015182516001600160f81b031990911690911c60f81c908110613e0757613e076149b6565b01602001516001600160f81b03191682613e22836002614ecc565b613e2d906002614b33565b81518110613e3d57613e3d6149b6565b60200101906001600160f81b031916908160001a90535082858281518110613e6757613e676149b6565b602091010151815160f89190911c600f16908110613e8757613e876149b6565b01602001516001600160f81b03191682613ea2836002614ecc565b613ead906003614b33565b81518110613ebd57613ebd6149b6565b60200101906001600160f81b031916908160001a90535080613ede816149e2565b915050613dc1565b509392505050565b606082471015613f4f5760405162461bcd60e51b815260206004820152602660248201527f416464726573733a20696e73756666696369656e742062616c616e636520666f6044820152651c8818d85b1b60d21b6064820152608401610454565b600080866001600160a01b03168587604051613f6b9190614e45565b60006040518083038185875af1925050503d8060008114613fa8576040519150601f19603f3d011682016040523d82523d6000602084013e613fad565b606091505b5091509150613fbe87838387613fc9565b979650505050505050565b6060831561403557825161402e576001600160a01b0385163b61402e5760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a2063616c6c20746f206e6f6e2d636f6e74726163740000006044820152606401610454565b5081612666565b612666838381511561404a5781518083602001fd5b8060405162461bcd60e51b81526004016104549190614710565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f191681016001600160401b03811182821017156140a2576140a2614064565b604052919050565b600082601f8301126140bb57600080fd5b81356001600160401b038111156140d4576140d4614064565b6140e7601f8201601f191660200161407a565b8181528460208386010111156140fc57600080fd5b816020850160208301376000918101602001919091529392505050565b60006080828403121561412b57600080fd5b604051608081016001600160401b03828210818311171561414e5761414e614064565b81604052829350843583526020850135602084015260408501356040840152606085013591508082111561418157600080fd5b5061418e858286016140aa565b6060830152505092915050565b6000602082840312156141ad57600080fd5b81356001600160401b038111156141c357600080fd5b61266684828501614119565b60008083601f8401126141e157600080fd5b5081356001600160401b038111156141f857600080fd5b60208301915083602082850101111561421057600080fd5b9250929050565b6000806000806060858703121561422d57600080fd5b843593506020850135925060408501356001600160401b0381111561425157600080fd5b61425d878288016141cf565b95989497509550505050565b6001600160a01b038116811461427e57600080fd5b50565b60008060006060848603121561429657600080fd5b8335925060208401356142a881614269565b915060408401356142b881614269565b809150509250925092565b60006001600160401b038211156142dc576142dc614064565b5060051b60200190565b600082601f8301126142f757600080fd5b8135602061430c614307836142c3565b61407a565b82815260059290921b8401810191818101908684111561432b57600080fd5b8286015b8481101561436a5780356001600160401b0381111561434e5760008081fd5b61435c8986838b0101614119565b84525091830191830161432f565b509695505050505050565b6000806000806080858703121561438b57600080fd5b843561439681614269565b9350602085810135935060408601356001600160401b03808211156143ba57600080fd5b6143c689838a016142e6565b945060608801359150808211156143dc57600080fd5b508601601f810188136143ee57600080fd5b80356143fc614307826142c3565b81815260059190911b8201830190838101908a83111561441b57600080fd5b928401925b8284101561443957833582529284019290840190614420565b979a9699509497505050505050565b801515811461427e57600080fd5b60008060008060008060a0878903121561446f57600080fd5b863561447a81614269565b9550602087013561448a81614448565b94506040870135600f81900b81146144a157600080fd5b935060608701356144b181614269565b925060808701356001600160401b038111156144cc57600080fd5b6144d889828a016141cf565b979a9699509497509295939492505050565b60008060008060008060a0878903121561450357600080fd5b863561450e81614269565b9550602087013561451e81614448565b94506040870135935060608701356144b181614269565b60008060006060848603121561454a57600080fd5b833561455581614269565b9250602084013561456581614269565b929592945050506040919091013590565b600080600080600060a0868803121561458e57600080fd5b853561459981614269565b94506020860135935060408601356145b081614269565b94979396509394606081013594506080013592915050565b600080600080608085870312156145de57600080fd5b84356145e981614269565b93506020850135925060408501356001600160401b0381111561460b57600080fd5b61461787828801614119565b949793965093946060013593505050565b60006020828403121561463a57600080fd5b81356001600160401b0381111561465057600080fd5b612666848285016142e6565b6000806000806080858703121561467257600080fd5b843561467d81614269565b9350602085013561468d81614269565b9250604085013561469d81614269565b915060608501356146ad81614269565b939692955090935050565b60005b838110156146d35781810151838201526020016146bb565b838111156104705750506000910152565b600081518084526146fc8160208601602086016146b8565b601f01601f19169290920160200192915050565b60208152600061284e60208301846146e4565b60006020828403121561473557600080fd5b81356001600160401b038082111561474c57600080fd5b908301906040828603121561476057600080fd5b60405160408101818110838211171561477b5761477b614064565b60405282358281111561478d57600080fd5b614799878286016140aa565b8252506020830135602082015280935050505092915050565b60208082526018908201527f4f70656e4f6365616e3a204163636573732044656e6965640000000000000000604082015260600190565b600080600080600080600060e0888a03121561480457600080fd5b87519650602088015195506040880151945060608801519350608088015161482b81614448565b60a089015190935061483c81614269565b60c089015190925061484d81614269565b8091505092959891949750929550565b80516001600160701b038116811461487457600080fd5b919050565b805161ffff8116811461487457600080fd5b600080600080608085870312156148a157600080fd5b6148aa8561485d565b93506148b86020860161485d565b92506148c660408601614879565b91506148d460608601614879565b905092959194509250565b6000602082840312156148f157600080fd5b5051919050565b84815283602082015260018060a01b038316604082015260806060820152600061492560808301846146e4565b9695505050505050565b60208082526022908201527f4f70656e4f6365616e3a20496e76616c69642063616c6c20706172616d657465604082015261727360f01b606082015260800190565b60208082526025908201527f4f70656e4f6365616e3a20496e73756666696369656e7420746f6b656e2062616040820152646c616e636560d81b606082015260800190565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156149f6576149f66149cc565b5060010190565b600081600f0b6f7fffffffffffffffffffffffffffffff19811415614a2457614a246149cc565b60000392915050565b602081526000825160406020840152614a4960608401826146e4565b9050602084015160408401528091505092915050565b60018060a01b03851681526001600160801b03841660208201528260020b604082015260806060820152600061492560808301846146e4565b60008060408385031215614aab57600080fd5b505080516020909101519092909150565b6000600160ff1b821415614ad257614ad26149cc565b5060000390565b60018060a01b03871681528560208201528415156040820152831515606082015282608082015260c060a08201526000612d3c60c08301846146e4565b600060208284031215614b2857600080fd5b8151613a5f81614448565b60008219821115614b4657614b466149cc565b500190565b600082821015614b5d57614b5d6149cc565b500390565b600181815b80851115614b9d578160001904821115614b8357614b836149cc565b80851615614b9057918102915b93841c9390800290614b67565b509250929050565b600082614bb457506001612851565b81614bc157506000612851565b8160018114614bd75760028114614be157614bfd565b6001915050612851565b60ff841115614bf257614bf26149cc565b50506001821b612851565b5060208310610133831016604e8410600b8410161715614c20575081810a612851565b614c2a8383614b62565b8060001904821115614c3e57614c3e6149cc565b029392505050565b600061284e8383614ba5565b602081528151602082015260208201516040820152604082015160608201526000606083015160808084015261266660a08401826146e4565b600080600080600060a08688031215614ca357600080fd5b614cac8661485d565b9450614cba6020870161485d565b9350614cc86040870161485d565b9250614cd66060870161485d565b9150608086015190509295509295909350565b60006001600160a01b0383811690831681811015614d0957614d096149cc565b039392505050565b60006001600160a01b03828116848216808303821115614d3357614d336149cc565b01949350505050565b6001600160a01b0386811682526020820186905284151560408301528316606082015260a060808201819052600090613fbe908301846146e4565b600080600060608486031215614d8c57600080fd5b614d958461485d565b9250614da36020850161485d565b9150604084015163ffffffff811681146142b857600080fd5b600060208284031215614dce57600080fd5b61284e8261485d565b60008060408385031215614dea57600080fd5b614df38361485d565b9150614e016020840161485d565b90509250929050565b6001600160a01b0386811682528515156020830152604082018590528316606082015260a060808201819052600090613fbe908301846146e4565b60008251614e578184602087016146b8565b9190910192915050565b600060208284031215614e7357600080fd5b8151613a5f81614269565b634e487b7160e01b600052602160045260246000fd5b6001600160f81b0319815260609390931b6bffffffffffffffffffffffff191660018401526015830191909152603582015260550190565b6000816000190483118215151615614ee657614ee66149cc565b500290565b600082614f0857634e487b7160e01b600052601260045260246000fd5b500490565b60008351614f1f8184602088016146b8565b6508ae4e4dee4560d31b9083019081528351614f428160068401602088016146b8565b602960f81b60069290910191820152600701949350505050565b60008351614f6e8184602088016146b8565b650a0c2dcd2c6560d31b9083019081528351614f428160068401602088016146b8565b60008251614fa38184602087016146b8565b68556e6b6e6f776e282960b81b92019182525060090191905056fea26469706673582212206b6f07404305cfda50e4a1905fec83f04d65d3cb8e2333f66655a744e3a41e4d64736f6c63430008090033