0x60e060405234801561001057600080fd5b5060405161161838038061161883398101604081905261002f91610064565b6001600160a01b0392831660805290821660a0521660c0526100b1565b6001600160a01b038116811461006157600080fd5b50565b60008060006060848603121561007957600080fd5b83516100848161004c565b60208501519093506100958161004c565b60408501519092506100a68161004c565b809150509250925092565b60805160a05160c05161151f6100f96000396000818160c50152818161032601526103cf01526000818160a30152818161014001526101e9015260006082015261151f6000f3fe608060405234801561001057600080fd5b50600436106100365760003560e01c80637f8547211461003b5780639ad1ee101461006a575b600080fd5b61004e6100493660046104ed565b61007d565b6040516001600160a01b03909116815260200160405180910390f35b61004e61007836600461051d565b6104b6565b6000807f00000000000000000000000000000000000000000000000000000000000000007f0000000000000000000000000000000000000000000000000000000000000000847f00000000000000000000000000000000000000000000000000000000000000006040516100f0906104e0565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610134573d6000803e3d6000fd5b509050600081905060007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031663d53913936040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c09190610536565b604051632f2ff15d60e01b8152600481018290526001600160a01b0384811660248301529192507f000000000000000000000000000000000000000000000000000000000000000090911690632f2ff15d90604401600060405180830381600087803b15801561022f57600080fd5b505af1158015610243573d6000803e3d6000fd5b505050506001600160a01b03851615610322576000856001600160a01b0316633cc616dc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ba9190610536565b604051632f2ff15d60e01b8152600481018290526001600160a01b03858116602483015291925090871690632f2ff15d90604401600060405180830381600087803b15801561030857600080fd5b505af115801561031c573d6000803e3d6000fd5b50505050505b60007f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316634e4e3eeb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a69190610536565b604051632f2ff15d60e01b8152600481018290526001600160a01b0385811660248301529192507f000000000000000000000000000000000000000000000000000000000000000090911690632f2ff15d90604401600060405180830381600087803b15801561041557600080fd5b505af1158015610429573d6000803e3d6000fd5b5050600080546001810182559080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b0387169081179091556040519081527f01bd1fa4c6c60a50b53a46cddebcb2c1514b9ccde3cffd7a94e706e20bf982479250602001905060405180910390a15090949350505050565b600081815481106104c657600080fd5b6000918252602090912001546001600160a01b0316905081565b610f9a8061055083390190565b6000602082840312156104ff57600080fd5b81356001600160a01b038116811461051657600080fd5b9392505050565b60006020828403121561052f57600080fd5b5035919050565b60006020828403121561054857600080fd5b505191905056fe6101006040526103e860005534801561001757600080fd5b50604051610f9a380380610f9a83398101604081905261003691610070565b6001600160a01b0393841660805291831660a052821660c0521660e0526100cf565b6001600160a01b038116811461006d57600080fd5b50565b6000806000806080858703121561008657600080fd5b845161009181610058565b60208601519094506100a281610058565b60408601519093506100b381610058565b60608601519092506100c481610058565b939692955090935050565b60805160a05160c05160e051610e7061012a6000396000818161077801526107e90152600081816101eb0152818161028c015281816103f2015261048601526000818160dd01526105710152600061064f0152610e706000f3fe6080604052600436106100295760003560e01c8063215f5d901461002e578063c4de42c914610043575b600080fd5b61004161003c3660046109bc565b610056565b005b610041610051366004610b05565b61037f565b8060c00151816060015161006a9190610c0b565b34146100b55760405162461bcd60e51b8152602060048201526015602482015274726566756e643a20696e76616c69642076616c756560581b60448201526064015b60405180910390fd5b6101408101516000906001600160a01b0316156100d7578161014001516100d9565b335b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350b0136c83604001518385608001518660a001518761010001516040518663ffffffff1660e01b8152600401610140959493929190610c64565b600060405180830381600087803b15801561015a57600080fd5b505af192505050801561016b575060015b6101df57610177610ca9565b806308c379a0036101d3575061018b610cc5565b8061019657506101d5565b7ffd42c5d2fd3f5c77a4ba872a4f394f3c8b60a8f8789e03e8ba6f7132ddbadbfe816040516101c59190610d4f565b60405180910390a1506101df565b505b3d6000803e3d6000fd5b60e082015115610303577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661026b5760405162461bcd60e51b815260206004820152602360248201527f726566756e643a20636173686261636b416464726573732069732072657175696044820152621c995960ea1b60648201526084016100ac565b815161012083015160c084015160e08501516040516352eb33d960e11b81527f0000000000000000000000000000000000000000000000000000000000000000946001600160a01b0386169463a5d667b2946102cf94929391929091600401610d69565b600060405180830381600087803b1580156102e957600080fd5b505af11580156102fd573d6000803e3d6000fd5b50505050505b81604001516001600160a01b03166108fc349081150290604051600060405180830381858888f19350505050158015610340573d6000803e3d6000fd5b5081604001516001600160a01b03167f83fc30766e714eaa999669a5ce0af0969882bfb13326a687ae25c30ed24ffe6660405160405180910390a25050565b6101008101516000908190808203610395575060055b6103a3818560600151610857565b925083608001518385606001516103ba9190610c0b565b6103c49190610c0b565b91506000846080015183346103d99190610c0b565b6103e39190610c0b565b60808601519091501561056f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166104665760405162461bcd60e51b815260206004820181905260248201527f7061793a20636173686261636b4164647265737320697320726571756972656460448201526064016100ac565b60808501518551602087015160a088015160405163d18f5e5760e01b81527f0000000000000000000000000000000000000000000000000000000000000000946001600160a01b0386169463d18f5e579491936104cd939192913391908690600401610da2565b6000604051808303818588803b1580156104e657600080fd5b505af1935050505080156104f8575060015b61056d57610504610ca9565b806308c379a0036101d35750610518610cc5565b8061052357506101d5565b60808701516105329086610dee565b94507f66e959625efb25e8b3a0b6a3528bc963d9141a96b5643e193f089dffe4e5439b816040516105639190610d4f565b60405180910390a1505b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ebc40ae3360006001600160a01b03168860e001516001600160a01b0316146105c7578760e001516105cd565b87604001515b60c08901516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820188905261ffff166064820152608401600060405180830381600087803b15801561062c57600080fd5b505af1158015610640573d6000803e3d6000fd5b50506040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925083156108fc02915083906000818181858888f1935050505015801561069a573d6000803e3d6000fd5b5084604001516001600160a01b03166108fc849081150290604051600060405180830381858888f193505050501580156106d8573d6000803e3d6000fd5b5084604001516001600160a01b03167fbb5d064ce5d6eff72afc974ddeddafcde840d414973126168651c3944ad3a567848760c0015160405161072992919091825261ffff16602082015260400190565b60405180910390a260e08501516000906001600160a01b0316610750578560400151610756565b8560e001515b604051630dc174bd60e01b81526001600160a01b0380831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690630dc174bd90602401600060405180830381600087803b1580156107be57600080fd5b505af11580156107d2573d6000803e3d6000fd5b5050604051630dc174bd60e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169250630dc174bd9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b50505050505050505050565b6000806103e86108678585610e01565b6108719190610e18565b9050662386f26fc1000081101561089257662386f26fc10000915050610895565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff811182821017156108d7576108d761089b565b6040525050565b604051610160810167ffffffffffffffff811182821017156109025761090261089b565b60405290565b604051610120810167ffffffffffffffff811182821017156109025761090261089b565b600082601f83011261093d57600080fd5b813567ffffffffffffffff8111156109575761095761089b565b60405161096e601f8301601f1916602001826108b1565b81815284602083860101111561098357600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160a01b03811681146109b757600080fd5b919050565b6000602082840312156109ce57600080fd5b813567ffffffffffffffff808211156109e657600080fd5b9083019061016082860312156109fb57600080fd5b610a036108de565b823582811115610a1257600080fd5b610a1e8782860161092c565b825250602083013582811115610a3357600080fd5b610a3f8782860161092c565b602083015250610a51604084016109a0565b6040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e08201526101008084013583811115610a9c57600080fd5b610aa88882870161092c565b8284015250506101208084013583811115610ac257600080fd5b610ace8882870161092c565b8284015250506101409150610ae48284016109a0565b91810191909152949350505050565b803561ffff811681146109b757600080fd5b600060208284031215610b1757600080fd5b813567ffffffffffffffff80821115610b2f57600080fd5b908301906101208286031215610b4457600080fd5b610b4c610908565b823582811115610b5b57600080fd5b610b678782860161092c565b825250602083013582811115610b7c57600080fd5b610b888782860161092c565b602083015250610b9a604084016109a0565b6040820152606083013560608201526080830135608082015260a083013560a0820152610bc960c08401610af3565b60c0820152610bda60e084016109a0565b60e08201526101009283013592810192909252509392505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561089557610895610bf5565b6000815180845260005b81811015610c4457602081850181015186830182015201610c28565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090610c9e90830184610c1e565b979650505050505050565b600060033d1115610cc25760046000803e5060005160e01c5b90565b600060443d1015610cd35790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715610d0357505050505090565b8285019150815181811115610d1b5750505050505090565b843d8701016020828501011115610d355750505050505090565b610d44602082860101876108b1565b509095945050505050565b602081526000610d626020830184610c1e565b9392505050565b608081526000610d7c6080830187610c1e565b8281036020840152610d8e8187610c1e565b604084019590955250506060015292915050565b60a081526000610db560a0830188610c1e565b8281036020840152610dc78188610c1e565b6001600160a01b039690961660408401525050606081019290925260809091015292915050565b8082018082111561089557610895610bf5565b808202811582820484141761089557610895610bf5565b600082610e3557634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220251e206da949ef8b7f6162751d461297aa6ff2520d1d3e2368379eb9f3b5083364736f6c63430008130033a2646970667358221220a5fa57a4583f79590032fef6f24252aa535d65e05507fb7d03a7dc2e23abbaca64736f6c6343000813003300000000000000000000000052c41787599e505c05ba5896fd137c5fe922b7bb0000000000000000000000004370ed4d3a3ffb5be6b5ac7a9f0b781f24b092fa00000000000000000000000056e442f99cafd7c890c404c1f8c16d38a569e41a
0x608060405234801561001057600080fd5b50600436106100365760003560e01c80637f8547211461003b5780639ad1ee101461006a575b600080fd5b61004e6100493660046104ed565b61007d565b6040516001600160a01b03909116815260200160405180910390f35b61004e61007836600461051d565b6104b6565b6000807f00000000000000000000000052c41787599e505c05ba5896fd137c5fe922b7bb7f0000000000000000000000004370ed4d3a3ffb5be6b5ac7a9f0b781f24b092fa847f00000000000000000000000056e442f99cafd7c890c404c1f8c16d38a569e41a6040516100f0906104e0565b6001600160a01b039485168152928416602084015290831660408301529091166060820152608001604051809103906000f080158015610134573d6000803e3d6000fd5b509050600081905060007f0000000000000000000000004370ed4d3a3ffb5be6b5ac7a9f0b781f24b092fa6001600160a01b031663d53913936040518163ffffffff1660e01b8152600401602060405180830381865afa15801561019c573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906101c09190610536565b604051632f2ff15d60e01b8152600481018290526001600160a01b0384811660248301529192507f0000000000000000000000004370ed4d3a3ffb5be6b5ac7a9f0b781f24b092fa90911690632f2ff15d90604401600060405180830381600087803b15801561022f57600080fd5b505af1158015610243573d6000803e3d6000fd5b505050506001600160a01b03851615610322576000856001600160a01b0316633cc616dc6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610296573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906102ba9190610536565b604051632f2ff15d60e01b8152600481018290526001600160a01b03858116602483015291925090871690632f2ff15d90604401600060405180830381600087803b15801561030857600080fd5b505af115801561031c573d6000803e3d6000fd5b50505050505b60007f00000000000000000000000056e442f99cafd7c890c404c1f8c16d38a569e41a6001600160a01b0316634e4e3eeb6040518163ffffffff1660e01b8152600401602060405180830381865afa158015610382573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906103a69190610536565b604051632f2ff15d60e01b8152600481018290526001600160a01b0385811660248301529192507f00000000000000000000000056e442f99cafd7c890c404c1f8c16d38a569e41a90911690632f2ff15d90604401600060405180830381600087803b15801561041557600080fd5b505af1158015610429573d6000803e3d6000fd5b5050600080546001810182559080527f290decd9548b62a8d60345a988386fc84ba6bc95484008f6362f93160ef3e5630180546001600160a01b0319166001600160a01b0387169081179091556040519081527f01bd1fa4c6c60a50b53a46cddebcb2c1514b9ccde3cffd7a94e706e20bf982479250602001905060405180910390a15090949350505050565b600081815481106104c657600080fd5b6000918252602090912001546001600160a01b0316905081565b610f9a8061055083390190565b6000602082840312156104ff57600080fd5b81356001600160a01b038116811461051657600080fd5b9392505050565b60006020828403121561052f57600080fd5b5035919050565b60006020828403121561054857600080fd5b505191905056fe6101006040526103e860005534801561001757600080fd5b50604051610f9a380380610f9a83398101604081905261003691610070565b6001600160a01b0393841660805291831660a052821660c0521660e0526100cf565b6001600160a01b038116811461006d57600080fd5b50565b6000806000806080858703121561008657600080fd5b845161009181610058565b60208601519094506100a281610058565b60408601519093506100b381610058565b60608601519092506100c481610058565b939692955090935050565b60805160a05160c05160e051610e7061012a6000396000818161077801526107e90152600081816101eb0152818161028c015281816103f2015261048601526000818160dd01526105710152600061064f0152610e706000f3fe6080604052600436106100295760003560e01c8063215f5d901461002e578063c4de42c914610043575b600080fd5b61004161003c3660046109bc565b610056565b005b610041610051366004610b05565b61037f565b8060c00151816060015161006a9190610c0b565b34146100b55760405162461bcd60e51b8152602060048201526015602482015274726566756e643a20696e76616c69642076616c756560581b60448201526064015b60405180910390fd5b6101408101516000906001600160a01b0316156100d7578161014001516100d9565b335b90507f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166350b0136c83604001518385608001518660a001518761010001516040518663ffffffff1660e01b8152600401610140959493929190610c64565b600060405180830381600087803b15801561015a57600080fd5b505af192505050801561016b575060015b6101df57610177610ca9565b806308c379a0036101d3575061018b610cc5565b8061019657506101d5565b7ffd42c5d2fd3f5c77a4ba872a4f394f3c8b60a8f8789e03e8ba6f7132ddbadbfe816040516101c59190610d4f565b60405180910390a1506101df565b505b3d6000803e3d6000fd5b60e082015115610303577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b031661026b5760405162461bcd60e51b815260206004820152602360248201527f726566756e643a20636173686261636b416464726573732069732072657175696044820152621c995960ea1b60648201526084016100ac565b815161012083015160c084015160e08501516040516352eb33d960e11b81527f0000000000000000000000000000000000000000000000000000000000000000946001600160a01b0386169463a5d667b2946102cf94929391929091600401610d69565b600060405180830381600087803b1580156102e957600080fd5b505af11580156102fd573d6000803e3d6000fd5b50505050505b81604001516001600160a01b03166108fc349081150290604051600060405180830381858888f19350505050158015610340573d6000803e3d6000fd5b5081604001516001600160a01b03167f83fc30766e714eaa999669a5ce0af0969882bfb13326a687ae25c30ed24ffe6660405160405180910390a25050565b6101008101516000908190808203610395575060055b6103a3818560600151610857565b925083608001518385606001516103ba9190610c0b565b6103c49190610c0b565b91506000846080015183346103d99190610c0b565b6103e39190610c0b565b60808601519091501561056f577f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03166104665760405162461bcd60e51b815260206004820181905260248201527f7061793a20636173686261636b4164647265737320697320726571756972656460448201526064016100ac565b60808501518551602087015160a088015160405163d18f5e5760e01b81527f0000000000000000000000000000000000000000000000000000000000000000946001600160a01b0386169463d18f5e579491936104cd939192913391908690600401610da2565b6000604051808303818588803b1580156104e657600080fd5b505af1935050505080156104f8575060015b61056d57610504610ca9565b806308c379a0036101d35750610518610cc5565b8061052357506101d5565b60808701516105329086610dee565b94507f66e959625efb25e8b3a0b6a3528bc963d9141a96b5643e193f089dffe4e5439b816040516105639190610d4f565b60405180910390a1505b505b7f00000000000000000000000000000000000000000000000000000000000000006001600160a01b0316638ebc40ae3360006001600160a01b03168860e001516001600160a01b0316146105c7578760e001516105cd565b87604001515b60c08901516040516001600160e01b031960e086901b1681526001600160a01b0393841660048201529290911660248301526044820188905261ffff166064820152608401600060405180830381600087803b15801561062c57600080fd5b505af1158015610640573d6000803e3d6000fd5b50506040516001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016925083156108fc02915083906000818181858888f1935050505015801561069a573d6000803e3d6000fd5b5084604001516001600160a01b03166108fc849081150290604051600060405180830381858888f193505050501580156106d8573d6000803e3d6000fd5b5084604001516001600160a01b03167fbb5d064ce5d6eff72afc974ddeddafcde840d414973126168651c3944ad3a567848760c0015160405161072992919091825261ffff16602082015260400190565b60405180910390a260e08501516000906001600160a01b0316610750578560400151610756565b8560e001515b604051630dc174bd60e01b81526001600160a01b0380831660048301529192507f000000000000000000000000000000000000000000000000000000000000000090911690630dc174bd90602401600060405180830381600087803b1580156107be57600080fd5b505af11580156107d2573d6000803e3d6000fd5b5050604051630dc174bd60e01b81523360048201527f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03169250630dc174bd9150602401600060405180830381600087803b15801561083757600080fd5b505af115801561084b573d6000803e3d6000fd5b50505050505050505050565b6000806103e86108678585610e01565b6108719190610e18565b9050662386f26fc1000081101561089257662386f26fc10000915050610895565b90505b92915050565b634e487b7160e01b600052604160045260246000fd5b601f8201601f1916810167ffffffffffffffff811182821017156108d7576108d761089b565b6040525050565b604051610160810167ffffffffffffffff811182821017156109025761090261089b565b60405290565b604051610120810167ffffffffffffffff811182821017156109025761090261089b565b600082601f83011261093d57600080fd5b813567ffffffffffffffff8111156109575761095761089b565b60405161096e601f8301601f1916602001826108b1565b81815284602083860101111561098357600080fd5b816020850160208301376000918101602001919091529392505050565b80356001600160a01b03811681146109b757600080fd5b919050565b6000602082840312156109ce57600080fd5b813567ffffffffffffffff808211156109e657600080fd5b9083019061016082860312156109fb57600080fd5b610a036108de565b823582811115610a1257600080fd5b610a1e8782860161092c565b825250602083013582811115610a3357600080fd5b610a3f8782860161092c565b602083015250610a51604084016109a0565b6040820152606083013560608201526080830135608082015260a083013560a082015260c083013560c082015260e083013560e08201526101008084013583811115610a9c57600080fd5b610aa88882870161092c565b8284015250506101208084013583811115610ac257600080fd5b610ace8882870161092c565b8284015250506101409150610ae48284016109a0565b91810191909152949350505050565b803561ffff811681146109b757600080fd5b600060208284031215610b1757600080fd5b813567ffffffffffffffff80821115610b2f57600080fd5b908301906101208286031215610b4457600080fd5b610b4c610908565b823582811115610b5b57600080fd5b610b678782860161092c565b825250602083013582811115610b7c57600080fd5b610b888782860161092c565b602083015250610b9a604084016109a0565b6040820152606083013560608201526080830135608082015260a083013560a0820152610bc960c08401610af3565b60c0820152610bda60e084016109a0565b60e08201526101009283013592810192909252509392505050565b634e487b7160e01b600052601160045260246000fd5b8181038181111561089557610895610bf5565b6000815180845260005b81811015610c4457602081850181015186830182015201610c28565b506000602082860101526020601f19601f83011685010191505092915050565b6001600160a01b03868116825285166020820152604081018490526060810183905260a060808201819052600090610c9e90830184610c1e565b979650505050505050565b600060033d1115610cc25760046000803e5060005160e01c5b90565b600060443d1015610cd35790565b6040516003193d81016004833e81513d67ffffffffffffffff8160248401118184111715610d0357505050505090565b8285019150815181811115610d1b5750505050505090565b843d8701016020828501011115610d355750505050505090565b610d44602082860101876108b1565b509095945050505050565b602081526000610d626020830184610c1e565b9392505050565b608081526000610d7c6080830187610c1e565b8281036020840152610d8e8187610c1e565b604084019590955250506060015292915050565b60a081526000610db560a0830188610c1e565b8281036020840152610dc78188610c1e565b6001600160a01b039690961660408401525050606081019290925260809091015292915050565b8082018082111561089557610895610bf5565b808202811582820484141761089557610895610bf5565b600082610e3557634e487b7160e01b600052601260045260246000fd5b50049056fea2646970667358221220251e206da949ef8b7f6162751d461297aa6ff2520d1d3e2368379eb9f3b5083364736f6c63430008130033a2646970667358221220a5fa57a4583f79590032fef6f24252aa535d65e05507fb7d03a7dc2e23abbaca64736f6c63430008130033