0x6080604052348015600f57600080fd5b506110318061001f6000396000f3fe608060405234801561001057600080fd5b506004361061002b5760003560e01c8063515e2d8d14610149575b60003560f881901c9060f081901c60ff9081169160e881901c9091169060481c73ffffffffffffffffffffffffffffffffffffffff166017353085156100eb5784156100d0576100d0610083604b6037366000610b88565b61008c91610bb2565b60601c61009e605f604b366000610b88565b6100a791610bb2565b60601c7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610172565b83156100de5750605f3560601c5b6100e983838361029f565b005b841561013057610130736b175474e89094c44da98b954eedeac495271d0f847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610172565b831561013e575060383560601c5b6100e98383836103ba565b61015c610157366004610c23565b6104d8565b6040516101699190610ce6565b60405180910390f35b6040805173ffffffffffffffffffffffffffffffffffffffff8481166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f095ea7b30000000000000000000000000000000000000000000000000000000017905291516000928392908716916102099190610d00565b6000604051808303816000865af19150503d8060008114610246576040519150601f19603f3d011682016040523d82523d6000602084013e61024b565b606091505b50915091508161029857848484836040517f4da2f22900000000000000000000000000000000000000000000000000000000815260040161028f9493929190610d1c565b60405180910390fd5b5050505050565b6040805173ffffffffffffffffffffffffffffffffffffffff8381166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f959912760000000000000000000000000000000000000000000000000000000017905291516000928392908716916103369190610d00565b6000604051808303816000865af19150503d8060008114610373576040519150601f19603f3d011682016040523d82523d6000602084013e610378565b606091505b509150915081610298578484826040517fbab7f2a700000000000000000000000000000000000000000000000000000000815260040161028f93929190610d5b565b6040805173ffffffffffffffffffffffffffffffffffffffff8381166024830152604480830186905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8d7ef9bb0000000000000000000000000000000000000000000000000000000017905291516000928392908716916104519190610d00565b6000604051808303816000865af19150503d806000811461048e576040519150601f19603f3d011682016040523d82523d6000602084013e610493565b606091505b5091509150816102985784600085836040517f4f8627f100000000000000000000000000000000000000000000000000000000815260040161028f9493929190610d99565b606060f886901c600080821561053d576104f487306001610619565b60005490915061051d90889073ffffffffffffffffffffffffffffffffffffffff1688846107e0565b61052857600061052b565b60015b915061053888823061029f565b6105c3565b60ff60f08a901c16610565736b175474e89094c44da98b954eedeac495271d0f306001610619565b6000549092506105a290736b175474e89094c44da98b954eedeac495271d0f9073ffffffffffffffffffffffffffffffffffffffff168b856107e0565b6105ad5760006105b0565b60015b92506105bf8983838930610835565b9150505b6040517fff0000000000000000000000000000000000000000000000000000000000000060f884901b16602082015260218101829052604101604051602081830303815290604052935050505095945050505050565b60008060008573ffffffffffffffffffffffffffffffffffffffff166370a0823186604051602401610667919073ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff83818316178352505050506040516106b59190610d00565b6000604051808303816000865af19150503d80600081146106f2576040519150601f19603f3d011682016040523d82523d6000602084013e6106f7565b606091505b509150915081610753576040517f14abae8b00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80881660048301528616602482015260440161028f565b808060200190518101906107679190610dd4565b925083156107d757826000036107c9576040517ff8d05b5e00000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff80881660048301528616602482015260440161028f565b826107d381610e1c565b9350505b50509392505050565b6000816107ee863086610a20565b101561081f5761081f85847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff610172565b8161082b868686610a20565b1095945050505050565b600080610843856012610e51565b61084e90600a610f8a565b905061086284670de0b6b3a7640000610f96565b8161087588670de0b6b3a7640000610fa9565b61087f9190610fc0565b6108899190610fa9565b9150816000036108eb576040517fd02973c800000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff88166004820152602481018790526044810186905260640161028f565b6108f6600183610e51565b6040805173ffffffffffffffffffffffffffffffffffffffff8681166024830152604480830185905283518084039091018152606490920183526020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff167f8d7ef9bb00000000000000000000000000000000000000000000000000000000179052915192945060009283928b169161098e91610d00565b6000604051808303816000865af19150503d80600081146109cb576040519150601f19603f3d011682016040523d82523d6000602084013e6109d0565b606091505b509150915081610a1457888885836040517f4f8627f100000000000000000000000000000000000000000000000000000000815260040161028f9493929190610d99565b50505095945050505050565b60008060008573ffffffffffffffffffffffffffffffffffffffff1663dd62ed3e8686604051602401610a7692919073ffffffffffffffffffffffffffffffffffffffff92831681529116602082015260400190565b6040516020818303038152906040529060e01b6020820180517bffffffffffffffffffffffffffffffffffffffffffffffffffffffff8381831617835250505050604051610ac49190610d00565b6000604051808303816000865af19150503d8060008114610b01576040519150601f19603f3d011682016040523d82523d6000602084013e610b06565b606091505b509150915081610b6a576040517fe4259c8500000000000000000000000000000000000000000000000000000000815273ffffffffffffffffffffffffffffffffffffffff808816600483015280871660248301528516604482015260640161028f565b80806020019051810190610b7e9190610dd4565b9695505050505050565b60008085851115610b9857600080fd5b83861115610ba557600080fd5b5050820193919092039150565b7fffffffffffffffffffffffffffffffffffffffff0000000000000000000000008135818116916014851015610bf25780818660140360031b1b83161692505b505092915050565b803573ffffffffffffffffffffffffffffffffffffffff81168114610c1e57600080fd5b919050565b600080600080600060a08688031215610c3b57600080fd5b85359450610c4b60208701610bfa565b9350610c5960408701610bfa565b9250610c6760608701610bfa565b949793965091946080013592915050565b60005b83811015610c93578181015183820152602001610c7b565b50506000910152565b60008151808452610cb4816020860160208601610c78565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169290920160200192915050565b602081526000610cf96020830184610c9c565b9392505050565b60008251610d12818460208701610c78565b9190910192915050565b600073ffffffffffffffffffffffffffffffffffffffff808716835280861660208401525083604083015260806060830152610b7e6080830184610c9c565b73ffffffffffffffffffffffffffffffffffffffff84168152826020820152606060408201526000610d906060830184610c9c565b95945050505050565b73ffffffffffffffffffffffffffffffffffffffff85168152836020820152826040820152608060608201526000610b7e6080830184610c9c565b600060208284031215610de657600080fd5b5051919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600081610e2b57610e2b610ded565b507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0190565b81810381811115610e6457610e64610ded565b92915050565b600181815b80851115610ec357817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610ea957610ea9610ded565b80851615610eb657918102915b93841c9390800290610e6f565b509250929050565b600082610eda57506001610e64565b81610ee757506000610e64565b8160018114610efd5760028114610f0757610f23565b6001915050610e64565b60ff841115610f1857610f18610ded565b50506001821b610e64565b5060208310610133831016604e8410600b8410161715610f46575081810a610e64565b610f508383610e6a565b807fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04821115610f8257610f82610ded565b029392505050565b6000610cf98383610ecb565b80820180821115610e6457610e64610ded565b8082028115828204841417610e6457610e64610ded565b600082610ff6577f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b50049056fea2646970667358221220e8217bfe8343fb84f89b97bac63561a96f304d2f3f16da79305e19e7cbf4f19c64736f6c63430008190033