0x608060405234801561001057600080fd5b5033600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036100845760006040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161007b91906101df565b60405180910390fd5b610093816100da60201b60201c565b5033600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506101fa565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006101c98261019e565b9050919050565b6101d9816101be565b82525050565b60006020820190506101f460008301846101d0565b92915050565b61149f806102096000396000f3fe60806040526004361061008a5760003560e01c80639e281a98116100595780639e281a981461012a578063a0ce91d814610153578063ac7475ed1461017c578063d0835895146101a5578063f2fde38b146101d057610091565b806320651d5d14610096578063715018a6146100bf5780638da5cb5b146100d65780639d1534951461010157610091565b3661009157005b600080fd5b3480156100a257600080fd5b506100bd60048036038101906100b89190610db9565b6101f9565b005b3480156100cb57600080fd5b506100d46103f1565b005b3480156100e257600080fd5b506100eb610405565b6040516100f89190610e5d565b60405180910390f35b34801561010d57600080fd5b5061012860048036038101906101239190610eae565b61042e565b005b34801561013657600080fd5b50610151600480360381019061014c9190610edb565b610519565b005b34801561015f57600080fd5b5061017a60048036038101906101759190610f1b565b610774565b005b34801561018857600080fd5b506101a3600480360381019061019e9190610f9c565b6108b8565b005b3480156101b157600080fd5b506101ba6109aa565b6040516101c79190610e5d565b60405180910390f35b3480156101dc57600080fd5b506101f760048036038101906101f29190610f9c565b6109d0565b005b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610289576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102809061104c565b60405180910390fd5b8181905084849050146102d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016102c8906110b8565b60405180910390fd5b60005b848490508110156103e9578573ffffffffffffffffffffffffffffffffffffffff1663a9059cbb86868481811061030e5761030d6110d8565b5b90506020020160208101906103239190610f9c565b858585818110610336576103356110d8565b5b905060200201356040518363ffffffff1660e01b815260040161035a929190611116565b6020604051808303816000875af1158015610379573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061039d9190611177565b6103dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d390611216565b60405180910390fd5b80806001019150506102d4565b505050505050565b6103f9610a56565b6104036000610add565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146104be576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104b59061104c565b60405180910390fd5b6104c83382610ba1565b3373ffffffffffffffffffffffffffffffffffffffff167f566e45b1c8057e725bf62796a7f1d37ae294393cab069725a09daddd1af98b798260405161050e9190611236565b60405180910390a250565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146105a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016105a09061104c565b60405180910390fd5b808273ffffffffffffffffffffffffffffffffffffffff166370a08231306040518263ffffffff1660e01b81526004016105e39190610e5d565b602060405180830381865afa158015610600573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106249190611266565b1015610665576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161065c90611305565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff1663a9059cbb33836040518363ffffffff1660e01b81526004016106a0929190611116565b6020604051808303816000875af11580156106bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906106e39190611177565b610722576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161071990611397565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff167f992ee874049a42cae0757a765cd7f641b6028cc35c3478bde8330bf417c3a7a9826040516107689190611236565b60405180910390a25050565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610804576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107fb9061104c565b60405180910390fd5b81819050848490501461084c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610843906110b8565b60405180910390fd5b60005b848490508110156108b1576108a48585838181106108705761086f6110d8565b5b90506020020160208101906108859190610f9c565b848484818110610898576108976110d8565b5b90506020020135610ba1565b808060010191505061084f565b5050505050565b6108c0610a56565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361092f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092690611403565b60405180910390fd5b80600160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507fda12ee837e6978172aaf54b16145ffe08414fd8710092ef033c71b8eb6ec189a8160405161099f9190610e5d565b60405180910390a150565b600160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6109d8610a56565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610a4a5760006040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401610a419190610e5d565b60405180910390fd5b610a5381610add565b50565b610a5e610c8e565b73ffffffffffffffffffffffffffffffffffffffff16610a7c610405565b73ffffffffffffffffffffffffffffffffffffffff1614610adb57610a9f610c8e565b6040517f118cdaa7000000000000000000000000000000000000000000000000000000008152600401610ad29190610e5d565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b80471015610be657306040517fcd786059000000000000000000000000000000000000000000000000000000008152600401610bdd9190610e5d565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051610c0c90611454565b60006040518083038185875af1925050503d8060008114610c49576040519150601f19603f3d011682016040523d82523d6000602084013e610c4e565b606091505b5050905080610c89576040517f1425ea4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b505050565b600033905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000610ccb82610ca0565b9050919050565b610cdb81610cc0565b8114610ce657600080fd5b50565b600081359050610cf881610cd2565b92915050565b600080fd5b600080fd5b600080fd5b60008083601f840112610d2357610d22610cfe565b5b8235905067ffffffffffffffff811115610d4057610d3f610d03565b5b602083019150836020820283011115610d5c57610d5b610d08565b5b9250929050565b60008083601f840112610d7957610d78610cfe565b5b8235905067ffffffffffffffff811115610d9657610d95610d03565b5b602083019150836020820283011115610db257610db1610d08565b5b9250929050565b600080600080600060608688031215610dd557610dd4610c96565b5b6000610de388828901610ce9565b955050602086013567ffffffffffffffff811115610e0457610e03610c9b565b5b610e1088828901610d0d565b9450945050604086013567ffffffffffffffff811115610e3357610e32610c9b565b5b610e3f88828901610d63565b92509250509295509295909350565b610e5781610cc0565b82525050565b6000602082019050610e726000830184610e4e565b92915050565b6000819050919050565b610e8b81610e78565b8114610e9657600080fd5b50565b600081359050610ea881610e82565b92915050565b600060208284031215610ec457610ec3610c96565b5b6000610ed284828501610e99565b91505092915050565b60008060408385031215610ef257610ef1610c96565b5b6000610f0085828601610ce9565b9250506020610f1185828601610e99565b9150509250929050565b60008060008060408587031215610f3557610f34610c96565b5b600085013567ffffffffffffffff811115610f5357610f52610c9b565b5b610f5f87828801610d0d565b9450945050602085013567ffffffffffffffff811115610f8257610f81610c9b565b5b610f8e87828801610d63565b925092505092959194509250565b600060208284031215610fb257610fb1610c96565b5b6000610fc084828501610ce9565b91505092915050565b600082825260208201905092915050565b7f4f6e6c79206f70657261746f722063616e2063616c6c20746869732066756e6360008201527f74696f6e2e000000000000000000000000000000000000000000000000000000602082015250565b6000611036602583610fc9565b915061104182610fda565b604082019050919050565b6000602082019050818103600083015261106581611029565b9050919050565b7f496e76616c696420696e70757420706172616d65746572730000000000000000600082015250565b60006110a2601883610fc9565b91506110ad8261106c565b602082019050919050565b600060208201905081810360008301526110d181611095565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b61111081610e78565b82525050565b600060408201905061112b6000830185610e4e565b6111386020830184611107565b9392505050565b60008115159050919050565b6111548161113f565b811461115f57600080fd5b50565b6000815190506111718161114b565b92915050565b60006020828403121561118d5761118c610c96565b5b600061119b84828501611162565b91505092915050565b7f556e61626c6520746f207472616e7366657220746f6b656e20746f207468652060008201527f6163636f756e7400000000000000000000000000000000000000000000000000602082015250565b6000611200602783610fc9565b915061120b826111a4565b604082019050919050565b6000602082019050818103600083015261122f816111f3565b9050919050565b600060208201905061124b6000830184611107565b92915050565b60008151905061126081610e82565b92915050565b60006020828403121561127c5761127b610c96565b5b600061128a84828501611251565b91505092915050565b7f4e6f7420656e6f7567682062616c616e636520696e2074686520636f6e74726160008201527f6374000000000000000000000000000000000000000000000000000000000000602082015250565b60006112ef602283610fc9565b91506112fa82611293565b604082019050919050565b6000602082019050818103600083015261131e816112e2565b9050919050565b7f556e61626c6520746f207472616e7366657220746f6b656e20746f207468652060008201527f6f776e6572206163636f756e7400000000000000000000000000000000000000602082015250565b6000611381602d83610fc9565b915061138c82611325565b604082019050919050565b600060208201905081810360008301526113b081611374565b9050919050565b7f496e76616c6964206f70657261746f7220616464726573730000000000000000600082015250565b60006113ed601883610fc9565b91506113f8826113b7565b602082019050919050565b6000602082019050818103600083015261141c816113e0565b9050919050565b600081905092915050565b50565b600061143e600083611423565b91506114498261142e565b600082019050919050565b600061145f82611431565b915081905091905056fea2646970667358221220d41c604433147f4da7eb3b9cdc32ebecaf7d29cc34ba4c9467d0b614ae34266564736f6c634300081b0033