Loading
60806040526001600c5534801561001557600080fd5b50604080518082018252600a8152694e454f50494e204c507360b01b6020918201528151808301835260018152603160f81b9082015281517f8b73c3c69bb8fe3d512ecc4cf759cc79239f7b179b0ffacaa9a75d522b39400f818301527fd7027ced55681abab9cd88c848c8125462cc6e121693c4b024296a93c5702c2d818401527fc89efdaa54c0f20c7adf612882df0950f5a951637e0307cdcb4c672f298b8bc660608201524660808201523060a0808301919091528351808303909101815260c09091019092528151910120600355600580546001600160a01b031916331790556128bb806101086000396000f3fe608060405234801561001057600080fd5b50600436106101b95760003560e01c80636a627842116100f9578063ba9a7a5611610097578063d21220a711610071578063d21220a714610449578063d505accf1461045c578063dd62ed3e1461046f578063fff6cae91461049a57600080fd5b8063ba9a7a561461041a578063bc25cf7714610423578063c45a01551461043657600080fd5b80637ecebe00116100d35780637ecebe001461038357806389afcb44146103a357806395d89b41146103cb578063a9059cbb1461040757600080fd5b80636a6278421461034757806370a082311461035a5780637464fc3d1461037a57600080fd5b806323b872dd116101665780633644e515116101405780633644e51514610319578063485cc955146103225780635909c0d5146103355780635a3d54931461033e57600080fd5b806323b872dd146102c557806330adf81f146102d8578063313ce567146102ff57600080fd5b8063095ea7b311610197578063095ea7b3146102605780630dfe16811461028357806318160ddd146102ae57600080fd5b8063022c0d9f146101be57806306fdde03146101d35780630902f1ac14610225575b600080fd5b6101d16101cc36600461245a565b6104a2565b005b61020f6040518060400160405280600a81526020017f4e454f50494e204c50730000000000000000000000000000000000000000000081525081565b60405161021c9190612520565b60405180910390f35b600854604080516001600160701b038084168252600160701b8404166020820152600160e01b90920463ffffffff169082015260600161021c565b61027361026e366004612553565b610b2e565b604051901515815260200161021c565b600654610296906001600160a01b031681565b6040516001600160a01b03909116815260200161021c565b6102b760005481565b60405190815260200161021c565b6102736102d336600461257f565b610b45565b6102b77f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c981565b610307601281565b60405160ff909116815260200161021c565b6102b760035481565b6101d16103303660046125c0565b610bd9565b6102b760095481565b6102b7600a5481565b6102b76103553660046125f9565b610c79565b6102b76103683660046125f9565b60016020526000908152604090205481565b6102b7600b5481565b6102b76103913660046125f9565b60046020526000908152604090205481565b6103b66103b13660046125f9565b611215565b6040805192835260208301919091520161021c565b61020f6040518060400160405280600681526020017f4e50542d4c50000000000000000000000000000000000000000000000000000081525081565b610273610415366004612553565b611699565b6102b76103e881565b6101d16104313660046125f9565b6116a6565b600554610296906001600160a01b031681565b600754610296906001600160a01b031681565b6101d161046a366004612616565b6117e3565b6102b761047d3660046125c0565b600260209081526000928352604080842090915290825290205481565b6101d1611a43565b600c546001146104f25760405162461bcd60e51b815260206004820152601660248201527513995bdc1a5b9cddd85c14185a5c8e881313d0d2d15160521b60448201526064015b60405180910390fd5b6000600c5560055460405163a25103bf60e01b81523360048201526001600160a01b039091169063a25103bf906024016020604051808303816000875af1158015610541573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610565919061268d565b6105b15760405162461bcd60e51b815260206004820152601b60248201527f4e656f70696e73776170506169723a204143434553535f44454e59000000000060448201526064016104e9565b60008511806105c05750600084115b6106325760405162461bcd60e51b815260206004820152602a60248201527f4e656f70696e73776170506169723a20494e53554646494349454e545f4f555460448201527f5055545f414d4f554e540000000000000000000000000000000000000000000060648201526084016104e9565b6000806106636008546001600160701b0380821692600160701b83049091169163ffffffff600160e01b9091041690565b5091509150816001600160701b0316871080156106885750806001600160701b031686105b6106fa5760405162461bcd60e51b815260206004820152602660248201527f4e656f70696e73776170506169723a20494e53554646494349454e545f4c495160448201527f554944495459000000000000000000000000000000000000000000000000000060648201526084016104e9565b60065460075460009182916001600160a01b039182169190811690891682148015906107385750806001600160a01b0316896001600160a01b031614155b6107845760405162461bcd60e51b815260206004820152601a60248201527f4e656f70696e73776170506169723a20494e56414c49445f544f00000000000060448201526064016104e9565b8a1561079557610795828a8d611b90565b89156107a6576107a6818a8c611b90565b861561082c576040517f10d1e85c0000000000000000000000000000000000000000000000000000000081526001600160a01b038a16906310d1e85c906107f99033908f908f908e908e906004016126af565b600060405180830381600087803b15801561081357600080fd5b505af1158015610827573d6000803e3d6000fd5b505050505b6040516370a0823160e01b81523060048201526001600160a01b038316906370a0823190602401602060405180830381865afa158015610870573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061089491906126fc565b6040516370a0823160e01b81523060048201529094506001600160a01b038216906370a0823190602401602060405180830381865afa1580156108db573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906108ff91906126fc565b92505050600089856001600160701b031661091a919061272b565b8311610927576000610944565b61093a8a6001600160701b03871661272b565b610944908461272b565b9050600061095b8a6001600160701b03871661272b565b8311610968576000610985565b61097b8a6001600160701b03871661272b565b610985908461272b565b905060008211806109965750600081115b610a085760405162461bcd60e51b815260206004820152602960248201527f4e656f70696e73776170506169723a20494e53554646494349454e545f494e5060448201527f55545f414d4f554e54000000000000000000000000000000000000000000000060648201526084016104e9565b6000610a2a610a18846003611cf4565b610a24876103e8611cf4565b90611d64565b90506000610a3c610a18846003611cf4565b9050610a61620f4240610a5b6001600160701b038b8116908b16611cf4565b90611cf4565b610a6b8383611cf4565b1015610ab95760405162461bcd60e51b815260206004820152601160248201527f4e656f70696e73776170506169723a204b00000000000000000000000000000060448201526064016104e9565b5050610ac784848888611dc2565b60408051838152602081018390529081018c9052606081018b90526001600160a01b038a169033907fd78ad95fa46c994b6551d0da85fc275fe613ce37657fb8d5e3d130840159d8229060800160405180910390a350506001600c55505050505050505050565b6000610b3b338484611fd0565b5060015b92915050565b6001600160a01b038316600090815260026020908152604080832033845290915281205460001914610bc4576001600160a01b0384166000908152600260209081526040808320338452909152902054610b9f9083611d64565b6001600160a01b03851660009081526002602090815260408083203384529091529020555b610bcf848484612032565b5060019392505050565b6005546001600160a01b03163314610c335760405162461bcd60e51b815260206004820152601960248201527f4e656f70696e73776170506169723a20464f5242494444454e0000000000000060448201526064016104e9565b600680546001600160a01b039384167fffffffffffffffffffffffff00000000000000000000000000000000000000009182161790915560078054929093169116179055565b6000600c54600114610cc65760405162461bcd60e51b815260206004820152601660248201527513995bdc1a5b9cddd85c14185a5c8e881313d0d2d15160521b60448201526064016104e9565b6000600c5560055460405163a25103bf60e01b81523360048201526001600160a01b039091169063a25103bf906024016020604051808303816000875af1158015610d15573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610d39919061268d565b610d855760405162461bcd60e51b815260206004820152601b60248201527f4e656f70696e73776170506169723a204143434553535f44454e59000000000060448201526064016104e9565b600080610db66008546001600160701b0380821692600160701b83049091169163ffffffff600160e01b9091041690565b506006546040516370a0823160e01b81523060048201529294509092506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610e08573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e2c91906126fc565b6007546040516370a0823160e01b81523060048201529192506000916001600160a01b03909116906370a0823190602401602060405180830381865afa158015610e7a573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610e9e91906126fc565b90506000610eb5836001600160701b038716611d64565b90506000610ecc836001600160701b038716611d64565b90506000610eda87876120d8565b600054909150806110ca57600554604080517f7cd07e4700000000000000000000000000000000000000000000000000000000815290516000926001600160a01b031691637cd07e479160048083019260209291908290030181865afa158015610f48573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610f6c9190612742565b9050336001600160a01b038216141561104657806001600160a01b03166340dc0e376040518163ffffffff1660e01b8152600401602060405180830381865afa158015610fbd573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610fe191906126fc565b995060008a118015610ff557506000198a14155b6110415760405162461bcd60e51b815260206004820152601560248201527f4261642064657369726564206c6971756964697479000000000000000000000060448201526064016104e9565b6110c4565b6001600160a01b0381161561109d5760405162461bcd60e51b815260206004820152601660248201527f4d757374206e6f742068617665206d69677261746f720000000000000000000060448201526064016104e9565b6110b56103e8610a246110b08888611cf4565b612215565b99506110c460006103e8612285565b50611111565b61110e6001600160701b0389166110e18684611cf4565b6110eb9190612775565b6001600160701b0389166110ff8685611cf4565b6111099190612775565b612314565b98505b600089116111875760405162461bcd60e51b815260206004820152602d60248201527f4e656f70696e73776170506169723a20494e53554646494349454e545f4c495160448201527f5549444954595f4d494e5445440000000000000000000000000000000000000060648201526084016104e9565b6111918a8a612285565b61119d86868a8a611dc2565b81156111c7576008546111c3906001600160701b0380821691600160701b900416611cf4565b600b555b604080518581526020810185905233917f4c209b5fc8ad50758f13e2e1088ba56a560dff690a1c6fef26394f4c03821c4f910160405180910390a250506001600c5550949695505050505050565b600080600c546001146112635760405162461bcd60e51b815260206004820152601660248201527513995bdc1a5b9cddd85c14185a5c8e881313d0d2d15160521b60448201526064016104e9565b6000600c5560055460405163a25103bf60e01b81523360048201526001600160a01b039091169063a25103bf906024016020604051808303816000875af11580156112b2573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112d6919061268d565b6113225760405162461bcd60e51b815260206004820152601b60248201527f4e656f70696e73776170506169723a204143434553535f44454e59000000000060448201526064016104e9565b6000806113536008546001600160701b0380821692600160701b83049091169163ffffffff600160e01b9091041690565b506006546007546040516370a0823160e01b81523060048201529395509193506001600160a01b039081169291169060009083906370a0823190602401602060405180830381865afa1580156113ad573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113d191906126fc565b6040516370a0823160e01b81523060048201529091506000906001600160a01b038416906370a0823190602401602060405180830381865afa15801561141b573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061143f91906126fc565b3060009081526001602052604081205491925061145c88886120d8565b6000549091508061146d8487611cf4565b6114779190612775565b9a50806114848486611cf4565b61148e9190612775565b995060008b1180156114a0575060008a115b6115125760405162461bcd60e51b815260206004820152602d60248201527f4e656f70696e73776170506169723a20494e53554646494349454e545f4c495160448201527f5549444954595f4255524e45440000000000000000000000000000000000000060648201526084016104e9565b61151c308461232c565b611527878d8d611b90565b611532868d8c611b90565b6040516370a0823160e01b81523060048201526001600160a01b038816906370a0823190602401602060405180830381865afa158015611576573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061159a91906126fc565b6040516370a0823160e01b81523060048201529095506001600160a01b038716906370a0823190602401602060405180830381865afa1580156115e1573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061160591906126fc565b935061161385858b8b611dc2565b811561163d57600854611639906001600160701b0380821691600160701b900416611cf4565b600b555b604080518c8152602081018c90526001600160a01b038e169133917fdccd412f0b1252819cb1fd330b93224ca42612892bb3f4f789976e6d81936496910160405180910390a35050505050505050506001600c81905550915091565b6000610b3b338484612032565b600c546001146116f15760405162461bcd60e51b815260206004820152601660248201527513995bdc1a5b9cddd85c14185a5c8e881313d0d2d15160521b60448201526064016104e9565b6000600c556006546007546008546040516370a0823160e01b81523060048201526001600160a01b03938416939092169161178c9184918691611787916001600160701b039091169084906370a08231906024015b602060405180830381865afa158015611763573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610a2491906126fc565b611b90565b6008546040516370a0823160e01b81523060048201526117d9918391869161178791600160701b9091046001600160701b0316906001600160a01b038516906370a0823190602401611746565b50506001600c5550565b428410156118335760405162461bcd60e51b815260206004820152601860248201527f4e656f70696e7377617045524332303a2045585049524544000000000000000060448201526064016104e9565b6003546001600160a01b038816600090815260046020526040812080549192917f6e71edae12b1b97f4d1f60370fef10105fa2faae0126114a169c64845d6126c9918b918b918b91908761188683612789565b909155506040805160208101969096526001600160a01b0394851690860152929091166060840152608083015260a082015260c0810187905260e0016040516020818303038152906040528051906020012060405160200161191a9291907f190100000000000000000000000000000000000000000000000000000000000081526002810192909252602282015260420190565b60408051601f198184030181528282528051602091820120600080855291840180845281905260ff88169284019290925260608301869052608083018590529092509060019060a0016020604051602081039080840390855afa158015611985573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b038116158015906119bb5750886001600160a01b0316816001600160a01b0316145b611a2d5760405162461bcd60e51b815260206004820152602260248201527f4e656f70696e7377617045524332303a20494e56414c49445f5349474e41545560448201527f524500000000000000000000000000000000000000000000000000000000000060648201526084016104e9565b611a38898989611fd0565b505050505050505050565b600c54600114611a8e5760405162461bcd60e51b815260206004820152601660248201527513995bdc1a5b9cddd85c14185a5c8e881313d0d2d15160521b60448201526064016104e9565b6000600c556006546040516370a0823160e01b8152306004820152611b89916001600160a01b0316906370a0823190602401602060405180830381865afa158015611add573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0191906126fc565b6007546040516370a0823160e01b81523060048201526001600160a01b03909116906370a0823190602401602060405180830381865afa158015611b49573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b6d91906126fc565b6008546001600160701b0380821691600160701b900416611dc2565b6001600c55565b604080518082018252601981527f7472616e7366657228616464726573732c75696e74323536290000000000000060209182015281516001600160a01b0385811660248301526044808301869052845180840390910181526064909201845291810180516001600160e01b03167fa9059cbb0000000000000000000000000000000000000000000000000000000017905291516000928392871691611c3591906127a4565b6000604051808303816000865af19150503d8060008114611c72576040519150601f19603f3d011682016040523d82523d6000602084013e611c77565b606091505b5091509150818015611ca1575080511580611ca1575080806020019051810190611ca1919061268d565b611ced5760405162461bcd60e51b815260206004820152601f60248201527f4e656f70696e73776170506169723a205452414e534645525f4641494c45440060448201526064016104e9565b5050505050565b6000811580611d1857508282611d0a81836127c0565b9250611d169083612775565b145b610b3f5760405162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6d756c2d6f766572666c6f7700000000000000000000000060448201526064016104e9565b600082611d71838261272b565b9150811115610b3f5760405162461bcd60e51b815260206004820152601560248201527f64732d6d6174682d7375622d756e646572666c6f77000000000000000000000060448201526064016104e9565b6001600160701b038411801590611de057506001600160701b038311155b611e2c5760405162461bcd60e51b815260206004820152601860248201527f4e656f70696e73776170506169723a204f564552464c4f57000000000000000060448201526064016104e9565b6000611e3d640100000000426127df565b600854909150600090611e5d90600160e01b900463ffffffff16836127f3565b905060008163ffffffff16118015611e7d57506001600160701b03841615155b8015611e9157506001600160701b03831615155b15611f20578063ffffffff16611eb985611eaa866123b6565b6001600160e01b0316906123cf565b6001600160e01b0316611ecc91906127c0565b60096000828254611edd9190612818565b909155505063ffffffff8116611ef684611eaa876123b6565b6001600160e01b0316611f0991906127c0565b600a6000828254611f1a9190612818565b90915550505b6008805463ffffffff8416600160e01b026001600160e01b036001600160701b03898116600160701b9081027fffffffff000000000000000000000000000000000000000000000000000000009095168c83161794909417918216831794859055604080519382169282169290921783529290930490911660208201527f1c411e9a96e071241c2f21f7726b17ae89e3cab4c78be50e062b03a9fffbbad1910160405180910390a1505050505050565b6001600160a01b0383811660008181526002602090815260408083209487168084529482529182902085905590518481527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591015b60405180910390a3505050565b6001600160a01b0383166000908152600160205260409020546120559082611d64565b6001600160a01b03808516600090815260016020526040808220939093559084168152205461208490826123e4565b6001600160a01b0380841660008181526001602052604090819020939093559151908516907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906120259085815260200190565b600080600560009054906101000a90046001600160a01b03166001600160a01b031663017e7e586040518163ffffffff1660e01b8152600401602060405180830381865afa15801561212e573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906121529190612742565b600b546001600160a01b0382161580159450919250906122015780156121fc57600061218d6110b06001600160701b03888116908816611cf4565b9050600061219a83612215565b9050808211156121f95760006121bc6121b38484611d64565b60005490611cf4565b905060006121d5836121cf866005611cf4565b906123e4565b905060006121e38284612775565b905080156121f5576121f58782612285565b5050505b50505b61220d565b801561220d576000600b555b505092915050565b60006003821115612276575080600061222f600283612775565b61223a906001612818565b90505b81811015612270579050806002816122558186612775565b61225f9190612818565b6122699190612775565b905061223d565b50919050565b8115612280575060015b919050565b60005461229290826123e4565b60009081556001600160a01b0383168152600160205260409020546122b790826123e4565b6001600160a01b0383166000818152600160205260408082209390935591519091907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef906123089085815260200190565b60405180910390a35050565b60008183106123235781612325565b825b9392505050565b6001600160a01b03821660009081526001602052604090205461234f9082611d64565b6001600160a01b038316600090815260016020526040812091909155546123769082611d64565b60009081556040518281526001600160a01b038416907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef90602001612308565b6000610b3f600160701b6001600160701b038416612830565b60006123256001600160701b0383168461285f565b6000826123f18382612818565b9150811015610b3f5760405162461bcd60e51b815260206004820152601460248201527f64732d6d6174682d6164642d6f766572666c6f7700000000000000000000000060448201526064016104e9565b6001600160a01b038116811461245757600080fd5b50565b60008060008060006080868803121561247257600080fd5b8535945060208601359350604086013561248b81612442565b9250606086013567ffffffffffffffff808211156124a857600080fd5b818801915088601f8301126124bc57600080fd5b8135818111156124cb57600080fd5b8960208285010111156124dd57600080fd5b9699959850939650602001949392505050565b60005b8381101561250b5781810151838201526020016124f3565b8381111561251a576000848401525b50505050565b602081526000825180602084015261253f8160408501602087016124f0565b601f01601f19169190910160400192915050565b6000806040838503121561256657600080fd5b823561257181612442565b946020939093013593505050565b60008060006060848603121561259457600080fd5b833561259f81612442565b925060208401356125af81612442565b929592945050506040919091013590565b600080604083850312156125d357600080fd5b82356125de81612442565b915060208301356125ee81612442565b809150509250929050565b60006020828403121561260b57600080fd5b813561232581612442565b600080600080600080600060e0888a03121561263157600080fd5b873561263c81612442565b9650602088013561264c81612442565b95506040880135945060608801359350608088013560ff8116811461267057600080fd5b9699959850939692959460a0840135945060c09093013592915050565b60006020828403121561269f57600080fd5b8151801515811461232557600080fd5b6001600160a01b038616815284602082015283604082015260806060820152816080820152818360a0830137600081830160a090810191909152601f909201601f19160101949350505050565b60006020828403121561270e57600080fd5b5051919050565b634e487b7160e01b600052601160045260246000fd5b60008282101561273d5761273d612715565b500390565b60006020828403121561275457600080fd5b815161232581612442565b634e487b7160e01b600052601260045260246000fd5b6000826127845761278461275f565b500490565b600060001982141561279d5761279d612715565b5060010190565b600082516127b68184602087016124f0565b9190910192915050565b60008160001904831182151516156127da576127da612715565b500290565b6000826127ee576127ee61275f565b500690565b600063ffffffff8381169083168181101561281057612810612715565b039392505050565b6000821982111561282b5761282b612715565b500190565b60006001600160e01b038083168185168183048111821515161561285657612856612715565b02949350505050565b60006001600160e01b03808416806128795761287961275f565b9216919091049291505056fea264697066735822122036e18a58aad337012823570201c77b78ed5ed8c2d665e5e70f4e3e781da7135f64736f6c634300080a0033