0x608060405234801561000f575f80fd5b50600436106100f0575f3560e01c806395d4063f11610093578063d09d197711610063578063d09d197714610217578063e6fd48bc14610241578063eb071b6314610268578063f9119bbd14610271575f80fd5b806395d4063f146101ae578063a0712d68146101c3578063aa6df299146101d6578063c8581e2a146101fd575f80fd5b806377c18c73116100ce57806377c18c731461014e5780638041950b146101565780638d50a3d9146101755780638d9f98101461017f575f80fd5b8063488fc775146100f457806351f293261461011a578063754b603914610145575b5f80fd5b610107610102366004610c7e565b610298565b6040519081526020015b60405180910390f35b60035461012d906001600160a01b031681565b6040516001600160a01b039091168152602001610111565b61010760015481565b6101075f5481565b61016062093a8081565b60405163ffffffff9091168152602001610111565b6101606201518081565b6101876102d3565b6040805163ffffffff94851681529284166020840152921691810191909152606001610111565b6101c16101bc366004610c97565b61038e565b005b6101c16101d1366004610cb7565b6104c3565b61012d7f0000000000000000000000009040067fc12238fbc418fbc3a4a03a6b449a9a2c81565b610205600881565b60405160ff9091168152602001610111565b610107610225366004610cce565b600460209081525f928352604080842090915290825290205481565b6101607f0000000000000000000000000000000000000000000000000000000066a3abe081565b61010760025481565b61012d7f000000000000000000000000f19308f923582a6f7c465e5ce7a9dc1bec6665b181565b5f808263ffffffff166001146102c0576001830363ffffffff1666b1a2bc2ec50000026102c2565b5f5b670de0b6b3a7640000039392505050565b5f80808061030763ffffffff7f0000000000000000000000000000000000000000000000000000000066a3abe01642610d20565b905061031662093a8082610d47565b610321906001610d6e565b60ff169350600884111561033457600893505b62093a80610343600186610d87565b61034d9190610da3565b610377907f0000000000000000000000000000000000000000000000000000000066a3abe0610dc9565b92506103866201518084610dc9565b915050909192565b4261039882610639565b63ffffffff1611156103bd57604051632db8551b60e11b815260040160405180910390fd5b335f90815260046020908152604080832060ff85168452909152812054908190036103fb5760405163ca959f6560e01b815260040160405180910390fd5b335f81815260046020908152604080832060ff871680855290835281842093909355518481529192917fb3df9980c12f4f6cbd2921f5dbaa79e0cbd522a59e93a57baab92fd3a4ecc33f910160405180910390a38060015461045d9190610de5565b6001556003546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f19906044015f604051808303815f87803b1580156104a9575f80fd5b505af11580156104bb573d5f803e3d5ffd5b505050505050565b805f036104e35760405163b4fa3fb360e01b815260040160405180910390fd5b7f0000000000000000000000000000000000000000000000000000000066a3abe063ffffffff1642101561052a57604051631864d7ab60e21b815260040160405180910390fd5b5f806105346102d3565b92505091508063ffffffff16421115610560576040516354913e1960e01b815260040160405180910390fd5b5f61056a84610697565b90505f670de0b6b3a764000061057f85610298565b6105899087610df8565b6105939190610e0f565b335f90815260046020908152604080832063ffffffff891684529091528120805492935083929091906105c7908490610de5565b909155505060405181815263ffffffff85169033907f35e338cd1c45f4d09abab571f5559403d556df8920b83a5e2710f6f6657d44019060200160405180910390a3806002546106179190610de5565b6002555f54610627908690610de5565b5f55610632826107d6565b5050505050565b5f8062093a8061064a600185610e22565b60ff166106579190610da3565b610681907f0000000000000000000000000000000000000000000000000000000066a3abe0610dc9565b90506106906201518082610dc9565b9392505050565b5f7f0000000000000000000000009040067fc12238fbc418fbc3a4a03a6b449a9a2c6001600160a01b031663d94439236040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107189190610e3b565b610720575090565b5f6107318360c8612710600161092d565b90505f61074584610320612710600161092d565b828503819003935090506107866001600160a01b037f000000000000000000000000f19308f923582a6f7c465e5ce7a9dc1bec6665b1163361dead8461097c565b6107cf6001600160a01b037f000000000000000000000000f19308f923582a6f7c465e5ce7a9dc1bec6665b116337384c17675a19be90788cbc7d455b2aeb7ebf650b48561097c565b5050919050565b61080b6001600160a01b037f000000000000000000000000f19308f923582a6f7c465e5ce7a9dc1bec6665b11633308461097c565b60405163095ea7b360e01b81526001600160a01b037f0000000000000000000000009040067fc12238fbc418fbc3a4a03a6b449a9a2c81166004830152602482018390527f000000000000000000000000f19308f923582a6f7c465e5ce7a9dc1bec6665b1169063095ea7b3906044016020604051808303815f875af1158015610897573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bb9190610e3b565b50604051630c371c6b60e21b8152600481018290527f0000000000000000000000009040067fc12238fbc418fbc3a4a03a6b449a9a2c6001600160a01b0316906330dc71ac906024015f604051808303815f87803b15801561091b575f80fd5b505af1158015610632573d5f803e3d5ffd5b5f8061093a8686866109dc565b905061094583610a9b565b801561096057505f848061095b5761095b610d33565b868809115b1561097357610970600182610de5565b90505b95945050505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526109d6908590610ac7565b50505050565b5f838302815f1985870982811083820303915050805f03610a1057838281610a0657610a06610d33565b0492505050610690565b808411610a305760405163227bc15360e01b815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f6002826003811115610ab057610ab0610e5a565b610aba9190610e6e565b60ff166001149050919050565b5f610adb6001600160a01b03841683610b32565b905080515f14158015610aff575080806020019051810190610afd9190610e3b565b155b15610b2d57604051635274afe760e01b81526001600160a01b03841660048201526024015b60405180910390fd5b505050565b6060610b3f83835f610b48565b90505b92915050565b606081471015610b6d5760405163cd78605960e01b8152306004820152602401610b24565b5f80856001600160a01b03168486604051610b889190610e8f565b5f6040518083038185875af1925050503d805f8114610bc2576040519150601f19603f3d011682016040523d82523d5f602084013e610bc7565b606091505b5091509150610bd7868383610be1565b9695505050505050565b606082610bf657610bf182610c3d565b610690565b8151158015610c0d57506001600160a01b0384163b155b15610c3657604051639996b31560e01b81526001600160a01b0385166004820152602401610b24565b5080610690565b805115610c4d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b803563ffffffff81168114610c79575f80fd5b919050565b5f60208284031215610c8e575f80fd5b610b3f82610c66565b5f60208284031215610ca7575f80fd5b813560ff81168114610690575f80fd5b5f60208284031215610cc7575f80fd5b5035919050565b5f8060408385031215610cdf575f80fd5b82356001600160a01b0381168114610cf5575f80fd5b9150610d0360208401610c66565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610b4257610b42610d0c565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff831680610d5c57610d5c610d33565b8063ffffffff84160491505092915050565b60ff8181168382160190811115610b4257610b42610d0c565b63ffffffff8281168282160390811115610b4257610b42610d0c565b63ffffffff8181168382160290811690818114610dc257610dc2610d0c565b5092915050565b63ffffffff8181168382160190811115610b4257610b42610d0c565b80820180821115610b4257610b42610d0c565b8082028115828204841417610b4257610b42610d0c565b5f82610e1d57610e1d610d33565b500490565b60ff8281168282160390811115610b4257610b42610d0c565b5f60208284031215610e4b575f80fd5b81518015158114610690575f80fd5b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680610e8057610e80610d33565b8060ff84160691505092915050565b5f82515f5b81811015610eae5760208186018101518583015201610e94565b505f92019182525091905056fea26469706673582212202eb7478563f359f011b60f9dca60ee8bc6987e06f1ef6b75eae55f19bf3b9cf864736f6c634300081a0033
0x60e060405260405161104a38038061104a83398101604081905261002291610096565b6001600160a01b0383166100495760405163b4fa3fb360e01b815260040160405180910390fd5b63ffffffff1660c052600380546001600160a01b031916331790556001600160a01b039081166080521660a0526100e2565b80516001600160a01b0381168114610091575f80fd5b919050565b5f805f606084860312156100a8575f80fd5b6100b18461007b565b92506100bf6020850161007b565b9150604084015163ffffffff811681146100d7575f80fd5b809150509250925092565b60805160a05160c051610ef16101595f395f8181610246015281816102e101528181610353015281816104e5015261065d01525f81816101db0152818161069a0152818161082201526108d201525f81816102760152818161075c01528181610793015281816107e301526108510152610ef15ff3fe608060405234801561000f575f80fd5b50600436106100f0575f3560e01c806395d4063f11610093578063d09d197711610063578063d09d197714610217578063e6fd48bc14610241578063eb071b6314610268578063f9119bbd14610271575f80fd5b806395d4063f146101ae578063a0712d68146101c3578063aa6df299146101d6578063c8581e2a146101fd575f80fd5b806377c18c73116100ce57806377c18c731461014e5780638041950b146101565780638d50a3d9146101755780638d9f98101461017f575f80fd5b8063488fc775146100f457806351f293261461011a578063754b603914610145575b5f80fd5b610107610102366004610c7e565b610298565b6040519081526020015b60405180910390f35b60035461012d906001600160a01b031681565b6040516001600160a01b039091168152602001610111565b61010760015481565b6101075f5481565b61016062093a8081565b60405163ffffffff9091168152602001610111565b6101606201518081565b6101876102d3565b6040805163ffffffff94851681529284166020840152921691810191909152606001610111565b6101c16101bc366004610c97565b61038e565b005b6101c16101d1366004610cb7565b6104c3565b61012d7f000000000000000000000000000000000000000000000000000000000000000081565b610205600881565b60405160ff9091168152602001610111565b610107610225366004610cce565b600460209081525f928352604080842090915290825290205481565b6101607f000000000000000000000000000000000000000000000000000000000000000081565b61010760025481565b61012d7f000000000000000000000000000000000000000000000000000000000000000081565b5f808263ffffffff166001146102c0576001830363ffffffff1666b1a2bc2ec50000026102c2565b5f5b670de0b6b3a7640000039392505050565b5f80808061030763ffffffff7f00000000000000000000000000000000000000000000000000000000000000001642610d20565b905061031662093a8082610d47565b610321906001610d6e565b60ff169350600884111561033457600893505b62093a80610343600186610d87565b61034d9190610da3565b610377907f0000000000000000000000000000000000000000000000000000000000000000610dc9565b92506103866201518084610dc9565b915050909192565b4261039882610639565b63ffffffff1611156103bd57604051632db8551b60e11b815260040160405180910390fd5b335f90815260046020908152604080832060ff85168452909152812054908190036103fb5760405163ca959f6560e01b815260040160405180910390fd5b335f81815260046020908152604080832060ff871680855290835281842093909355518481529192917fb3df9980c12f4f6cbd2921f5dbaa79e0cbd522a59e93a57baab92fd3a4ecc33f910160405180910390a38060015461045d9190610de5565b6001556003546040516340c10f1960e01b8152336004820152602481018390526001600160a01b03909116906340c10f19906044015f604051808303815f87803b1580156104a9575f80fd5b505af11580156104bb573d5f803e3d5ffd5b505050505050565b805f036104e35760405163b4fa3fb360e01b815260040160405180910390fd5b7f000000000000000000000000000000000000000000000000000000000000000063ffffffff1642101561052a57604051631864d7ab60e21b815260040160405180910390fd5b5f806105346102d3565b92505091508063ffffffff16421115610560576040516354913e1960e01b815260040160405180910390fd5b5f61056a84610697565b90505f670de0b6b3a764000061057f85610298565b6105899087610df8565b6105939190610e0f565b335f90815260046020908152604080832063ffffffff891684529091528120805492935083929091906105c7908490610de5565b909155505060405181815263ffffffff85169033907f35e338cd1c45f4d09abab571f5559403d556df8920b83a5e2710f6f6657d44019060200160405180910390a3806002546106179190610de5565b6002555f54610627908690610de5565b5f55610632826107d6565b5050505050565b5f8062093a8061064a600185610e22565b60ff166106579190610da3565b610681907f0000000000000000000000000000000000000000000000000000000000000000610dc9565b90506106906201518082610dc9565b9392505050565b5f7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d94439236040518163ffffffff1660e01b8152600401602060405180830381865afa1580156106f4573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906107189190610e3b565b610720575090565b5f6107318360c8612710600161092d565b90505f61074584610320612710600161092d565b828503819003935090506107866001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000163361dead8461097c565b6107cf6001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016337384c17675a19be90788cbc7d455b2aeb7ebf650b48561097c565b5050919050565b61080b6001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633308461097c565b60405163095ea7b360e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000081166004830152602482018390527f0000000000000000000000000000000000000000000000000000000000000000169063095ea7b3906044016020604051808303815f875af1158015610897573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906108bb9190610e3b565b50604051630c371c6b60e21b8152600481018290527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316906330dc71ac906024015f604051808303815f87803b15801561091b575f80fd5b505af1158015610632573d5f803e3d5ffd5b5f8061093a8686866109dc565b905061094583610a9b565b801561096057505f848061095b5761095b610d33565b868809115b1561097357610970600182610de5565b90505b95945050505050565b604080516001600160a01b0385811660248301528416604482015260648082018490528251808303909101815260849091019091526020810180516001600160e01b03166323b872dd60e01b1790526109d6908590610ac7565b50505050565b5f838302815f1985870982811083820303915050805f03610a1057838281610a0657610a06610d33565b0492505050610690565b808411610a305760405163227bc15360e01b815260040160405180910390fd5b5f848688095f868103871696879004966002600389028118808a02820302808a02820302808a02820302808a02820302808a02820302808a02909103029181900381900460010186841190950394909402919094039290920491909117919091029150509392505050565b5f6002826003811115610ab057610ab0610e5a565b610aba9190610e6e565b60ff166001149050919050565b5f610adb6001600160a01b03841683610b32565b905080515f14158015610aff575080806020019051810190610afd9190610e3b565b155b15610b2d57604051635274afe760e01b81526001600160a01b03841660048201526024015b60405180910390fd5b505050565b6060610b3f83835f610b48565b90505b92915050565b606081471015610b6d5760405163cd78605960e01b8152306004820152602401610b24565b5f80856001600160a01b03168486604051610b889190610e8f565b5f6040518083038185875af1925050503d805f8114610bc2576040519150601f19603f3d011682016040523d82523d5f602084013e610bc7565b606091505b5091509150610bd7868383610be1565b9695505050505050565b606082610bf657610bf182610c3d565b610690565b8151158015610c0d57506001600160a01b0384163b155b15610c3657604051639996b31560e01b81526001600160a01b0385166004820152602401610b24565b5080610690565b805115610c4d5780518082602001fd5b604051630a12f52160e11b815260040160405180910390fd5b803563ffffffff81168114610c79575f80fd5b919050565b5f60208284031215610c8e575f80fd5b610b3f82610c66565b5f60208284031215610ca7575f80fd5b813560ff81168114610690575f80fd5b5f60208284031215610cc7575f80fd5b5035919050565b5f8060408385031215610cdf575f80fd5b82356001600160a01b0381168114610cf5575f80fd5b9150610d0360208401610c66565b90509250929050565b634e487b7160e01b5f52601160045260245ffd5b81810381811115610b4257610b42610d0c565b634e487b7160e01b5f52601260045260245ffd5b5f63ffffffff831680610d5c57610d5c610d33565b8063ffffffff84160491505092915050565b60ff8181168382160190811115610b4257610b42610d0c565b63ffffffff8281168282160390811115610b4257610b42610d0c565b63ffffffff8181168382160290811690818114610dc257610dc2610d0c565b5092915050565b63ffffffff8181168382160190811115610b4257610b42610d0c565b80820180821115610b4257610b42610d0c565b8082028115828204841417610b4257610b42610d0c565b5f82610e1d57610e1d610d33565b500490565b60ff8281168282160390811115610b4257610b42610d0c565b5f60208284031215610e4b575f80fd5b81518015158114610690575f80fd5b634e487b7160e01b5f52602160045260245ffd5b5f60ff831680610e8057610e80610d33565b8060ff84160691505092915050565b5f82515f5b81811015610eae5760208186018101518583015201610e94565b505f92019182525091905056fea26469706673582212202eb7478563f359f011b60f9dca60ee8bc6987e06f1ef6b75eae55f19bf3b9cf864736f6c634300081a00330000000000000000000000009040067fc12238fbc418fbc3a4a03a6b449a9a2c000000000000000000000000f19308f923582a6f7c465e5ce7a9dc1bec6665b10000000000000000000000000000000000000000000000000000000066a3abe0