0x6080604052600436106102305760003560e01c80636352211e1161012e578063b26fec41116100ab578063c87b56dd1161006f578063c87b56dd14610820578063e985e9c51461085d578063f3fef3a31461089a578063f5f71ced146108c3578063f7d97577146108ec57610230565b8063b26fec4114610748578063b4b5b48f14610773578063b88d4fde146107b0578063bb707609146107cc578063c0e68fec146107f757610230565b8063970ee840116100f2578063970ee8401461067657806398d5fdca1461069f5780639d432474146106cb578063a035b1fe146106f4578063a22cb4651461071f57610230565b80636352211e1461057d57806370a08231146105ba5780638456cb59146105f75780638462151c1461060e57806395d89b411461064b57610230565b80632a55205a116101bc5780633f4ba83a116101805780633f4ba83a146104b957806342842e0e146104d057806344004cc1146104ec5780634f6ccce7146105155780635c975abb1461055257610230565b80632a55205a146103ce5780632f745c591461040c578063313ce567146104495780633cb064ba146104745780633e4086e51461049057610230565b8063095ea7b311610203578063095ea7b314610305578063150b7a0214610321578063162094c41461035e57806318160ddd1461038757806323b872dd146103b257610230565b806301ffc9a714610235578063031bd4c41461027257806306fdde031461029d578063081812fc146102c8575b600080fd5b34801561024157600080fd5b5061025c6004803603810190610257919061378a565b610915565b6040516102699190614077565b60405180910390f35b34801561027e57600080fd5b5061028761097d565b6040516102949190614425565b60405180910390f35b3480156102a957600080fd5b506102b2610983565b6040516102bf91906140c8565b60405180910390f35b3480156102d457600080fd5b506102ef60048036038101906102ea91906137e4565b610a15565b6040516102fc9190613f2e565b60405180910390f35b61031f600480360381019061031a91906136b6565b610a52565b005b34801561032d57600080fd5b50610348600480360381019061034391906135ee565b610c74565b60405161035591906140ad565b60405180910390f35b34801561036a57600080fd5b5061038560048036038101906103809190613811565b610ce3565b005b34801561039357600080fd5b5061039c610d9f565b6040516103a99190614425565b60405180910390f35b6103cc60048036038101906103c7919061359b565b610da9565b005b3480156103da57600080fd5b506103f560048036038101906103f0919061386d565b610db9565b60405161040392919061402c565b60405180910390f35b34801561041857600080fd5b50610433600480360381019061042e91906136b6565b610e0b565b6040516104409190614425565b60405180910390f35b34801561045557600080fd5b5061045e610ef5565b60405161046b9190614469565b60405180910390f35b61048e600480360381019061048991906136f6565b610efa565b005b34801561049c57600080fd5b506104b760048036038101906104b291906137e4565b6117ca565b005b3480156104c557600080fd5b506104ce611864565b005b6104ea60048036038101906104e5919061359b565b611956565b005b3480156104f857600080fd5b50610513600480360381019061050e919061359b565b611976565b005b34801561052157600080fd5b5061053c600480360381019061053791906137e4565b611b20565b6040516105499190614425565b60405180910390f35b34801561055e57600080fd5b50610567611b86565b6040516105749190614077565b60405180910390f35b34801561058957600080fd5b506105a4600480360381019061059f91906137e4565b611b99565b6040516105b19190613f2e565b60405180910390f35b3480156105c657600080fd5b506105e160048036038101906105dc9190613501565b611c78565b6040516105ee9190614425565b60405180910390f35b34801561060357600080fd5b5061060c611cfd565b005b34801561061a57600080fd5b5061063560048036038101906106309190613501565b611daa565b6040516106429190614055565b60405180910390f35b34801561065757600080fd5b50610660611e41565b60405161066d91906140c8565b60405180910390f35b34801561068257600080fd5b5061069d600480360381019061069891906137e4565b611ed3565b005b3480156106ab57600080fd5b506106b4611fb0565b6040516106c2929190614440565b60405180910390f35b3480156106d757600080fd5b506106f260048036038101906106ed91906137e4565b611fc1565b005b34801561070057600080fd5b50610709612274565b6040516107169190614425565b60405180910390f35b34801561072b57600080fd5b5061074660048036038101906107419190613676565b61227a565b005b34801561075457600080fd5b5061075d612377565b60405161076a9190614425565b60405180910390f35b34801561077f57600080fd5b5061079a600480360381019061079591906137e4565b61237d565b6040516107a79190614092565b60405180910390f35b6107ca60048036038101906107c591906135ee565b61239a565b005b3480156107d857600080fd5b506107e16123f1565b6040516107ee9190614425565b60405180910390f35b34801561080357600080fd5b5061081e600480360381019061081991906137e4565b6123f7565b005b34801561082c57600080fd5b50610847600480360381019061084291906137e4565b6124d6565b60405161085491906140c8565b60405180910390f35b34801561086957600080fd5b50610884600480360381019061087f919061355b565b6125d6565b6040516108919190614077565b60405180910390f35b3480156108a657600080fd5b506108c160048036038101906108bc91906136b6565b6126c6565b005b3480156108cf57600080fd5b506108ea60048036038101906108e59190613676565b61284a565b005b3480156108f857600080fd5b50610913600480360381019061090e919061386d565b612935565b005b600060036000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060009054906101000a900460ff169050919050565b60045481565b606060008054610992906147d6565b80601f01602080910402602001604051908101604052809291908181526020018280546109be906147d6565b8015610a0b5780601f106109e057610100808354040283529160200191610a0b565b820191906000526020600020905b8154815290600101906020018083116109ee57829003601f168201915b5050505050905090565b60006012600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000600f600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480610b4a5750601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b610b89576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b809061422a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610bc257600080fd5b826012600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b6000601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610cd057600080fd5b63150b7a0260e01b905095945050505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6a9061438a565b60405180910390fd5b80601160008481526020019081526020016000209080519060200190610d9a9291906132db565b505050565b6000600554905090565b610db4838383612aa2565b505050565b600080600061271060085485610dcf91906145fd565b610dd991906145cc565b9050600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168192509250509250929050565b6000601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490508210610e91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e889061420a565b60405180910390fd5b601060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000208281548110610ee257610ee161499d565b5b9060005260206000200154905092915050565b600090565b83600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f62906142aa565b60405180910390fd5b60045460055410610fb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa8906140ea565b60405180910390fd5b60001515600960009054906101000a900460ff16151514806110205750600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b61105f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110569061432a565b60405180910390fd5b60018460ff1610156110a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109d906141ca565b60405180910390fd5b600c548460ff1611156110ee576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110e59061434a565b60405180910390fd5b60008361ffff161015801561110957506105398361ffff1611155b611148576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161113f9061428a565b60405180910390fd5b60008260ff16148061115d575060018260ff16145b61119c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111939061430a565b60405180910390fd5b6000600660008154809291906111b190614839565b919050558644426040516020016111cb9493929190613ee0565b60405160208183030381529060405280519060200120905060d88560ff16901b60001b60e042901b60001b60c067ffffffffffffffff901b60001b198316171790506000600a54905060008561ffff1611156115d7573373ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636352211e876040518263ffffffff1660e01b8152600401611293919061440a565b60206040518083038186803b1580156112ab57600080fd5b505afa1580156112bf573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906112e3919061352e565b73ffffffffffffffffffffffffffffffffffffffff1614611339576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611330906141aa565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663081812fc876040518263ffffffff1660e01b81526004016113ab919061440a565b60206040518083038186803b1580156113c357600080fd5b505afa1580156113d7573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906113fb919061352e565b73ffffffffffffffffffffffffffffffffffffffff161461150357601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663e985e9c533306040518363ffffffff1660e01b8152600401611473929190613f49565b60206040518083038186803b15801561148b57600080fd5b505afa15801561149f573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906114c3919061375d565b611502576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f9906142ca565b60405180910390fd5b5b601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3330886040518463ffffffff1660e01b815260040161156293929190613f72565b600060405180830381600087803b15801561157c57600080fd5b505af1158015611590573d6000803e3d6000fd5b5050505060c88561ffff16901b60001b8217915060018460ff1614156115c45760c08460ff16901b60001b821791506115d6565b6002600a546115d391906145cc565b90505b5b60018660ff16111561160e57600b546001876115f3919061468b565b60ff1661160091906145fd565b8161160b9190614576565b90505b80341015611651576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116489061410a565b60405180910390fd5b600060056000815461166290614839565b919050819055905082600e60008381526020019081526020016000208190555087600f600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081908060018154018082558091505060019003906000526020600020016000909190919091505560008661ffff1611156117645780600d60008861ffff168152602001908152602001600020819055505b808873ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461185a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118519061438a565b60405180910390fd5b8060088190555050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146118f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118eb9061438a565b60405180910390fd5b6000600a5411611939576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611930906142ea565b60405180910390fd5b6000600960006101000a81548160ff021916908315150217905550565b61197183838360405180602001604052806000815250613063565b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611a06576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119fd9061438a565b60405180910390fd5b60008111611a49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a409061412a565b60405180910390fd5b60008373ffffffffffffffffffffffffffffffffffffffff1663a9059cbb84846040518363ffffffff1660e01b8152600401611a8692919061402c565b602060405180830381600087803b158015611aa057600080fd5b505af1158015611ab4573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ad8919061375d565b905080611b1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b11906143ca565b60405180910390fd5b50505050565b6000808210158015611b33575060055482105b611b72576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b69906143aa565b60405180910390fd5b600182611b7f9190614576565b9050919050565b600960009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff16600f600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415611c3d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c34906143aa565b60405180910390fd5b600f600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cb357600080fd5b601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805490509050919050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d849061438a565b60405180910390fd5b6001600960006101000a81548160ff021916908315150217905550565b6060601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020805480602002602001604051908101604052809291908181526020018280548015611e3557602002820191906000526020600020905b815481526020019060010190808311611e21575b50505050509050919050565b606060018054611e50906147d6565b80601f0160208091040260200160405190810160405280929190818152602001828054611e7c906147d6565b8015611ec95780601f10611e9e57610100808354040283529160200191611ec9565b820191906000526020600020905b815481529060010190602001808311611eac57829003601f168201915b5050505050905090565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f5a9061438a565b60405180910390fd5b60008111611fa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9d9061416a565b60405180910390fd5b80600c8190555050565b600080600a54600b54915091509091565b6000600d60008381526020019081526020016000205490506000811161201c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120139061418a565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff16600f600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146120bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120b49061414a565b60405180910390fd5b6000600e6000838152602001908152602001600020549050600060e082901c60001c905060008078010000000000000000000000000000000000000000000000008460001c1611905080156121625762278d004261211b9190614657565b82111561215d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121549061426a565b60405180910390fd5b6121b4565b624f1a00426121719190614657565b8211156121b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121aa9061426a565b60405180910390fd5b5b60c062ffffff901b198360001c1660001b600e600086815260200190815260200160002081905550601560009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166342842e0e3033886040518463ffffffff1660e01b815260040161223b93929190613fa9565b600060405180830381600087803b15801561225557600080fd5b505af1158015612269573d6000803e3d6000fd5b505050505050505050565b600a5481565b80601360003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161236b9190614077565b60405180910390a35050565b600c5481565b6000600e6000838152602001908152602001600020549050919050565b6123ea85858585858080601f016020809104026020016040519081016040528093929190818152602001838380828437600081840152601f19601f82011690508083019250505050505050613063565b5050505050565b600b5481565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612487576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247e9061438a565b60405180910390fd5b6005548110156124cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124c39061416a565b60405180910390fd5b8060048190555050565b606060006011600084815260200190815260200160002080546124f8906147d6565b905011156125a35760116000838152602001908152602001600020805461251e906147d6565b80601f016020809104026020016040519081016040528092919081815260200182805461254a906147d6565b80156125975780601f1061256c57610100808354040283529160200191612597565b820191906000526020600020905b81548152906001019060200180831161257a57829003601f168201915b505050505090506125d1565b60026125ae8361316a565b6040516020016125bf929190613e9c565b60405160208183030381529060405290505b919050565b6000601460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff161561263357600190506126c0565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff1690505b92915050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614612756576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161274d9061438a565b60405180910390fd5b60008111612799576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127909061412a565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff16826040516127bf90613ecb565b60006040518083038185875af1925050503d80600081146127fc576040519150601f19603f3d011682016040523d82523d6000602084013e612801565b606091505b5050905080612845576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161283c906143ca565b60405180910390fd5b505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146128da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128d19061438a565b60405180910390fd5b80601460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055505050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146129c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129bc9061438a565b60405180910390fd5b670de0b6b3a7640000821015612a10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a07906142ea565b60405180910390fd5b60008111612a53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a4a906143ea565b60405180910390fd5b81600a8190555080600b819055507f92664190cca12aca9cd5309d87194bdda75bb51362d71c06e1a6f75c7c765711600a54600b54604051612a96929190614440565b60405180910390a15050565b6000600f600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612b49576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b40906141ea565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614612bb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bae9061436a565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161480612c4f57506012600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16145b80612ce05750601360008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b80612d345750601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff165b612d73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6a9061424a565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff166012600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612e11576012600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690555b600f600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000601060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020905060005b8180549050811015612f485783828281548110612ead57612eac61499d565b5b90600052602060002001541415612f35578160018380549050612ed09190614657565b81548110612ee157612ee061499d565b5b9060005260206000200154828281548110612eff57612efe61499d565b5b906000526020600020018190555081805480612f1e57612f1d61496e565b5b600190038181906000526020600020016000905590555b8080612f4090614839565b915050612e8d565b5083600f600085815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550601060008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020839080600181540180825580915050600190039060005260206000200160009091909190915055828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050505050565b61306e848484612aa2565b613077836132c8565b156131645760008373ffffffffffffffffffffffffffffffffffffffff1663150b7a02338786866040518563ffffffff1660e01b81526004016130bd9493929190613fe0565b602060405180830381600087803b1580156130d757600080fd5b505af11580156130eb573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061310f91906137b7565b905063150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161461316257600080fd5b505b50505050565b606060008214156131b2576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506132c3565b600082905060005b600082146131e45780806131cd90614839565b915050600a826131dd91906145cc565b91506131ba565b60008167ffffffffffffffff811115613200576131ff6149cc565b5b6040519080825280601f01601f1916602001820160405280156132325781602001600182028036833780820191505090505b5090505b600085146132bc57600a8561324b91906148b0565b60306132579190614576565b60f81b8183613265906147ac565b935083815181106132795761327861499d565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856132b591906145cc565b9450613236565b8093505050505b919050565b600080823b905060008111915050919050565b8280546132e7906147d6565b90600052602060002090601f0160209004810192826133095760008555613350565b82601f1061332257805160ff1916838001178555613350565b82800160010185558215613350579182015b8281111561334f578251825591602001919060010190613334565b5b50905061335d9190613361565b5090565b5b8082111561337a576000816000905550600101613362565b5090565b600061339161338c846144a9565b614484565b9050828152602081018484840111156133ad576133ac614a0a565b5b6133b884828561476a565b509392505050565b6000813590506133cf81614e64565b92915050565b6000815190506133e481614e64565b92915050565b6000813590506133f981614e7b565b92915050565b60008151905061340e81614e7b565b92915050565b60008135905061342381614e92565b92915050565b60008151905061343881614e92565b92915050565b60008083601f84011261345457613453614a00565b5b8235905067ffffffffffffffff811115613471576134706149fb565b5b60208301915083600182028301111561348d5761348c614a05565b5b9250929050565b600082601f8301126134a9576134a8614a00565b5b81356134b984826020860161337e565b91505092915050565b6000813590506134d181614ea9565b92915050565b6000813590506134e681614ec0565b92915050565b6000813590506134fb81614ed7565b92915050565b60006020828403121561351757613516614a14565b5b6000613525848285016133c0565b91505092915050565b60006020828403121561354457613543614a14565b5b6000613552848285016133d5565b91505092915050565b6000806040838503121561357257613571614a14565b5b6000613580858286016133c0565b9250506020613591858286016133c0565b9150509250929050565b6000806000606084860312156135b4576135b3614a14565b5b60006135c2868287016133c0565b93505060206135d3868287016133c0565b92505060406135e4868287016134d7565b9150509250925092565b60008060008060006080868803121561360a57613609614a14565b5b6000613618888289016133c0565b9550506020613629888289016133c0565b945050604061363a888289016134d7565b935050606086013567ffffffffffffffff81111561365b5761365a614a0f565b5b6136678882890161343e565b92509250509295509295909350565b6000806040838503121561368d5761368c614a14565b5b600061369b858286016133c0565b92505060206136ac858286016133ea565b9150509250929050565b600080604083850312156136cd576136cc614a14565b5b60006136db858286016133c0565b92505060206136ec858286016134d7565b9150509250929050565b600080600080608085870312156137105761370f614a14565b5b600061371e878288016133c0565b945050602061372f878288016134ec565b9350506040613740878288016134c2565b9250506060613751878288016134ec565b91505092959194509250565b60006020828403121561377357613772614a14565b5b6000613781848285016133ff565b91505092915050565b6000602082840312156137a05761379f614a14565b5b60006137ae84828501613414565b91505092915050565b6000602082840312156137cd576137cc614a14565b5b60006137db84828501613429565b91505092915050565b6000602082840312156137fa576137f9614a14565b5b6000613808848285016134d7565b91505092915050565b6000806040838503121561382857613827614a14565b5b6000613836858286016134d7565b925050602083013567ffffffffffffffff81111561385757613856614a0f565b5b61386385828601613494565b9150509250929050565b6000806040838503121561388457613883614a14565b5b6000613892858286016134d7565b92505060206138a3858286016134d7565b9150509250929050565b60006138b98383613e58565b60208301905092915050565b6138ce816146bf565b82525050565b6138e56138e0826146bf565b614882565b82525050565b60006138f6826144ff565b613900818561452d565b935061390b836144da565b8060005b8381101561393c57815161392388826138ad565b975061392e83614520565b92505060018101905061390f565b5085935050505092915050565b613952816146d1565b82525050565b613961816146dd565b82525050565b613970816146e7565b82525050565b60006139818261450a565b61398b818561453e565b935061399b818560208601614779565b6139a481614a19565b840191505092915050565b60006139ba82614515565b6139c4818561455a565b93506139d4818560208601614779565b6139dd81614a19565b840191505092915050565b60006139f382614515565b6139fd818561456b565b9350613a0d818560208601614779565b80840191505092915050565b60008154613a26816147d6565b613a30818661456b565b94506001821660008114613a4b5760018114613a5c57613a8f565b60ff19831686528186019350613a8f565b613a65856144ea565b60005b83811015613a8757815481890152600182019150602081019050613a68565b838801955050505b50505092915050565b6000613aa560148361455a565b9150613ab082614a37565b602082019050919050565b6000613ac8601c8361455a565b9150613ad382614a60565b602082019050919050565b6000613aeb600e8361455a565b9150613af682614a89565b602082019050919050565b6000613b0e60108361455a565b9150613b1982614ab2565b602082019050919050565b6000613b3160108361455a565b9150613b3c82614adb565b602082019050919050565b6000613b5460168361455a565b9150613b5f82614b04565b602082019050919050565b6000613b7760108361455a565b9150613b8282614b2d565b602082019050919050565b6000613b9a601c8361455a565b9150613ba582614b56565b602082019050919050565b6000613bbd601c8361455a565b9150613bc882614b7f565b602082019050919050565b6000613be0601b8361455a565b9150613beb82614ba8565b602082019050919050565b6000613c03600b8361455a565b9150613c0e82614bd1565b602082019050919050565b6000613c26600b8361455a565b9150613c3182614bfa565b602082019050919050565b6000613c4960138361455a565b9150613c5482614c23565b602082019050919050565b6000613c6c60058361456b565b9150613c7782614c4c565b600582019050919050565b6000613c8f600d8361455a565b9150613c9a82614c75565b602082019050919050565b6000613cb2601b8361455a565b9150613cbd82614c9e565b602082019050919050565b6000613cd5601a8361455a565b9150613ce082614cc7565b602082019050919050565b6000613cf860108361455a565b9150613d0382614cf0565b602082019050919050565b6000613d1b60098361455a565b9150613d2682614d19565b602082019050919050565b6000613d3e60118361455a565b9150613d4982614d42565b602082019050919050565b6000613d6160008361454f565b9150613d6c82614d6b565b600082019050919050565b6000613d8460128361455a565b9150613d8f82614d6e565b602082019050919050565b6000613da7600c8361455a565b9150613db282614d97565b602082019050919050565b6000613dca60168361455a565b9150613dd582614dc0565b602082019050919050565b6000613ded600d8361455a565b9150613df882614de9565b602082019050919050565b6000613e10600f8361455a565b9150613e1b82614e12565b602082019050919050565b6000613e3360198361455a565b9150613e3e82614e3b565b602082019050919050565b613e5281614758565b82525050565b613e6181614741565b82525050565b613e7081614741565b82525050565b613e87613e8282614741565b6148a6565b82525050565b613e968161474b565b82525050565b6000613ea88285613a19565b9150613eb482846139e8565b9150613ebf82613c5f565b91508190509392505050565b6000613ed682613d54565b9150819050919050565b6000613eec8287613e76565b602082019150613efc82866138d4565b601482019150613f0c8285613e76565b602082019150613f1c8284613e76565b60208201915081905095945050505050565b6000602082019050613f4360008301846138c5565b92915050565b6000604082019050613f5e60008301856138c5565b613f6b60208301846138c5565b9392505050565b6000606082019050613f8760008301866138c5565b613f9460208301856138c5565b613fa16040830184613e49565b949350505050565b6000606082019050613fbe60008301866138c5565b613fcb60208301856138c5565b613fd86040830184613e67565b949350505050565b6000608082019050613ff560008301876138c5565b61400260208301866138c5565b61400f6040830185613e67565b81810360608301526140218184613976565b905095945050505050565b600060408201905061404160008301856138c5565b61404e6020830184613e67565b9392505050565b6000602082019050818103600083015261406f81846138eb565b905092915050565b600060208201905061408c6000830184613949565b92915050565b60006020820190506140a76000830184613958565b92915050565b60006020820190506140c26000830184613967565b92915050565b600060208201905081810360008301526140e281846139af565b905092915050565b6000602082019050818103600083015261410381613a98565b9050919050565b6000602082019050818103600083015261412381613abb565b9050919050565b6000602082019050818103600083015261414381613ade565b9050919050565b6000602082019050818103600083015261416381613b01565b9050919050565b6000602082019050818103600083015261418381613b24565b9050919050565b600060208201905081810360008301526141a381613b47565b9050919050565b600060208201905081810360008301526141c381613b6a565b9050919050565b600060208201905081810360008301526141e381613b8d565b9050919050565b6000602082019050818103600083015261420381613bb0565b9050919050565b6000602082019050818103600083015261422381613bd3565b9050919050565b6000602082019050818103600083015261424381613bf6565b9050919050565b6000602082019050818103600083015261426381613c19565b9050919050565b6000602082019050818103600083015261428381613c3c565b9050919050565b600060208201905081810360008301526142a381613c82565b9050919050565b600060208201905081810360008301526142c381613ca5565b9050919050565b600060208201905081810360008301526142e381613cc8565b9050919050565b6000602082019050818103600083015261430381613ceb565b9050919050565b6000602082019050818103600083015261432381613d0e565b9050919050565b6000602082019050818103600083015261434381613d31565b9050919050565b6000602082019050818103600083015261436381613d77565b9050919050565b6000602082019050818103600083015261438381613d9a565b9050919050565b600060208201905081810360008301526143a381613dbd565b9050919050565b600060208201905081810360008301526143c381613de0565b9050919050565b600060208201905081810360008301526143e381613e03565b9050919050565b6000602082019050818103600083015261440381613e26565b9050919050565b600060208201905061441f6000830184613e49565b92915050565b600060208201905061443a6000830184613e67565b92915050565b60006040820190506144556000830185613e67565b6144626020830184613e67565b9392505050565b600060208201905061447e6000830184613e8d565b92915050565b600061448e61449f565b905061449a8282614808565b919050565b6000604051905090565b600067ffffffffffffffff8211156144c4576144c36149cc565b5b6144cd82614a19565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061458182614741565b915061458c83614741565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156145c1576145c06148e1565b5b828201905092915050565b60006145d782614741565b91506145e283614741565b9250826145f2576145f1614910565b5b828204905092915050565b600061460882614741565b915061461383614741565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561464c5761464b6148e1565b5b828202905092915050565b600061466282614741565b915061466d83614741565b9250828210156146805761467f6148e1565b5b828203905092915050565b60006146968261474b565b91506146a18361474b565b9250828210156146b4576146b36148e1565b5b828203905092915050565b60006146ca82614721565b9050919050565b60008115159050919050565b6000819050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600061ffff82169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b600061476382614713565b9050919050565b82818337600083830152505050565b60005b8381101561479757808201518184015260208101905061477c565b838111156147a6576000848401525b50505050565b60006147b782614741565b915060008214156147cb576147ca6148e1565b5b600182039050919050565b600060028204905060018216806147ee57607f821691505b602082108114156148025761480161493f565b5b50919050565b61481182614a19565b810181811067ffffffffffffffff821117156148305761482f6149cc565b5b80604052505050565b600061484482614741565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614877576148766148e1565b5b600182019050919050565b600061488d82614894565b9050919050565b600061489f82614a2a565b9050919050565b6000819050919050565b60006148bb82614741565b91506148c683614741565b9250826148d6576148d5614910565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f616c6c20747265657320617265206d696e746564000000000000000000000000600082015250565b7f6e6f7420656e6f7567682076616c7565207472616e7366657272656400000000600082015250565b7f616d6f756e74206973207a65726f000000000000000000000000000000000000600082015250565b7f6e6f7420612074726565206f776e657200000000000000000000000000000000600082015250565b7f7365742070726f706572206c696d697400000000000000000000000000000000600082015250565b7f6e6f20747265652077697468207468697320736f6f7400000000000000000000600082015250565b7f6e6f74206120736f6f74206f776e657200000000000000000000000000000000600082015250565b7f706c616e74206174206c65617374206f6e65207265616c207472656500000000600082015250565b7f7472616e7366657220746f207468652073616d65206164647265737300000000600082015250565b7f6e6f207375636820746f6b656e206f662074686973206f776e65720000000000600082015250565b7f6e6f7720616c6c6f776564000000000000000000000000000000000000000000600082015250565b7f6e6f7420616c6c6f776564000000000000000000000000000000000000000000600082015250565b7f63616e6e6f742077697468647261772079657400000000000000000000000000600082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f77726f6e6720736f6f7420696400000000000000000000000000000000000000600082015250565b7f63616e6e6f74206d696e7420746f207a65726f20616464726573730000000000600082015250565b7f736f6f74207472616e73666572206e6f7420617070726f766564000000000000600082015250565b7f7365742070726f70657220707269636500000000000000000000000000000000600082015250565b7f62616420666c6167730000000000000000000000000000000000000000000000600082015250565b7f6d696e74696e6720697320706175736564000000000000000000000000000000600082015250565b50565b7f746f6f206d616e792049524c2074726565730000000000000000000000000000600082015250565b7f6e6f7420616e206f776e65720000000000000000000000000000000000000000600082015250565b7f6f6e6c79206f776e65722063616e20646f207468697300000000000000000000600082015250565b7f6e6f207375636820746f6b656e00000000000000000000000000000000000000600082015250565b7f7472616e73666572206661696c65640000000000000000000000000000000000600082015250565b7f7365742070726f7065722049524c207472656520707269636500000000000000600082015250565b614e6d816146bf565b8114614e7857600080fd5b50565b614e84816146d1565b8114614e8f57600080fd5b50565b614e9b816146e7565b8114614ea657600080fd5b50565b614eb281614713565b8114614ebd57600080fd5b50565b614ec981614741565b8114614ed457600080fd5b50565b614ee08161474b565b8114614eeb57600080fd5b5056fea2646970667358221220942a775dbe6d29c6134506dbb21cbb74aebaadb0ac2bb1420d16fc5b2d59597b64736f6c63430008070033