0x608060405234801561001057600080fd5b50610e47806100206000396000f3fe6080604052600436106100745760003560e01c8063a224ee9c1161004e578063a224ee9c146101bc578063b0138132146101d1578063d4b83992146101f3578063ed1f266814610208576100b4565b80631806b5f214610151578063485cc95514610171578063797594b014610191576100b4565b366100b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ab90610a9e565b60405180910390fd5b600054610100900473ffffffffffffffffffffffffffffffffffffffff163314156100e6576100e1610228565b61014f565b6100ee61026a565b61014d6000368080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201829052505473ffffffffffffffffffffffffffffffffffffffff610100909104169392503491505061029c565b505b005b34801561015d57600080fd5b5061014f61016c3660046108cb565b610324565b34801561017d57600080fd5b5061014f61018c366004610834565b610456565b34801561019d57600080fd5b506101a66105cc565b6040516101b391906109c3565b60405180910390f35b3480156101c857600080fd5b506101a66105e8565b3480156101dd57600080fd5b506101e6610604565b6040516101b39190610d27565b3480156101ff57600080fd5b506101a6610628565b34801561021457600080fd5b5061014f610223366004610868565b610649565b6102686000368080601f0160208091040260200160405190810160405280939291908181526020018383808284376000920191909152506106eb92505050565b565b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ab90610c47565b6060600060608573ffffffffffffffffffffffffffffffffffffffff1684866040516102c891906109a7565b60006040518083038185875af1925050503d8060008114610305576040519150601f19603f3d011682016040523d82523d6000602084013e61030a565b606091505b50915091508161031b578060208201fd5b95945050505050565b60015473ffffffffffffffffffffffffffffffffffffffff848116911614610378576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ab906109e4565b60015463ffffffff8381167401000000000000000000000000000000000000000090920416146103d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ab90610a41565b60025473ffffffffffffffffffffffffffffffffffffffff163314610425576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ab90610b8d565b6000805461044f90610100900473ffffffffffffffffffffffffffffffffffffffff16838361029c565b5050505050565b60005460ff1615610493576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ab90610ad3565b600080547fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0016600117905573ffffffffffffffffffffffffffffffffffffffff821661050b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ab90610bea565b73ffffffffffffffffffffffffffffffffffffffff8116610558576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ab90610cca565b600080547fffffffffffffffffffffff0000000000000000000000000000000000000000ff1661010073ffffffffffffffffffffffffffffffffffffffff94851602179055600180547fffffffffffffffffffffffff00000000000000000000000000000000000000001691909216179055565b60015473ffffffffffffffffffffffffffffffffffffffff1681565b60025473ffffffffffffffffffffffffffffffffffffffff1681565b60015474010000000000000000000000000000000000000000900463ffffffff1681565b600054610100900473ffffffffffffffffffffffffffffffffffffffff1681565b6106538484610456565b6001805463ffffffff90931674010000000000000000000000000000000000000000027fffffffffffffffff00000000ffffffffffffffffffffffffffffffffffffffff909316929092179091556002805473ffffffffffffffffffffffffffffffffffffffff9092167fffffffffffffffffffffffff00000000000000000000000000000000000000009092169190911790555050565b600054610100900473ffffffffffffffffffffffffffffffffffffffff163314610741576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016100ab90610b30565b6002546001546040517f240ff37800000000000000000000000000000000000000000000000000000000815260009273ffffffffffffffffffffffffffffffffffffffff9081169263240ff378926107c09263ffffffff7401000000000000000000000000000000000000000084041692169086908890600401610d38565b600060405180830381600087803b1580156107da57600080fd5b505af11580156107ee573d6000803e3d6000fd5b505050505050565b803573ffffffffffffffffffffffffffffffffffffffff8116811461081a57600080fd5b92915050565b803563ffffffff8116811461081a57600080fd5b60008060408385031215610846578182fd5b61085084846107f6565b915061085f84602085016107f6565b90509250929050565b6000806000806080858703121561087d578182fd5b843561088881610dec565b9350602085013561089881610dec565b9250604085013563ffffffff811681146108b0578283fd5b915060608501356108c081610dec565b939692955090935050565b6000806000606084860312156108df578283fd5b6108e985856107f6565b925060206108f986828701610820565b9250604085013567ffffffffffffffff80821115610915578384fd5b818701915087601f830112610928578384fd5b813581811115610936578485fd5b604051847fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0601f8401168201018181108482111715610973578687fd5b60405281815283820185018a1015610989578586fd5b81858501868301378585838301015280955050505050509250925092565b600082516109b9818460208701610dbc565b9190910192915050565b73ffffffffffffffffffffffffffffffffffffffff91909116815260200190565b6020808252603d908201527f504c595f5a4b5f434e523a204f726967696e206164647265737320646f65732060408201527f6e6f74206d6174636820636f756e746572706172742061646472657373000000606082015260800190565b6020808252603d908201527f504c595f5a4b5f434e523a204f726967696e206e6574776f726b20646f65732060408201527f6e6f74206d6174636820636f756e74657270617274206e6574776f726b000000606082015260800190565b6020808252818101527f446f206e6f742073656e642045544820746f207468697320636f6e7472616374604082015260600190565b6020808252602e908201527f496e697469616c697a61626c653a20636f6e747261637420697320616c72656160408201527f647920696e697469616c697a6564000000000000000000000000000000000000606082015260800190565b6020808252602d908201527f504c595f5a4b5f434e523a2043616c6c6572206973206e6f742074686520657860408201527f7065637465642073656e64657200000000000000000000000000000000000000606082015260800190565b60208082526027908201527f504c595f5a4b5f434e523a2043616c6c6572206973206e6f7420746865206d6560408201527f7373656e67657200000000000000000000000000000000000000000000000000606082015260800190565b60208082526022908201527f434e523a205461726765742063616e6e6f74206265207a65726f20616464726560408201527f7373000000000000000000000000000000000000000000000000000000000000606082015260800190565b6020808252604b908201527f424153455f504c595f5a4b5f434e523a205f76657269667943726f7373446f6d60408201527f61696e53656e64657228292069732068616e646c6564206279206f6e4d65737360608201527f6167655265636569766564000000000000000000000000000000000000000000608082015260a00190565b60208082526027908201527f434e523a20436f756e746572706172742063616e6e6f74206265207a65726f2060408201527f6164647265737300000000000000000000000000000000000000000000000000606082015260800190565b63ffffffff91909116815260200190565b600063ffffffff8616825273ffffffffffffffffffffffffffffffffffffffff851660208301528315156040830152608060608301528251806080840152610d878160a0850160208701610dbc565b601f017fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffe0169190910160a00195945050505050565b60005b83811015610dd7578181015183820152602001610dbf565b83811115610de6576000848401525b50505050565b73ffffffffffffffffffffffffffffffffffffffff81168114610e0e57600080fd5b5056fea26469706673582212208583cb330d4c62f212baf00ae3058dc912f16474f704e35bf5b6cea6b1ad715c64736f6c634300060c0033